Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* Задание 1. Конкатенация двух списков с сохранением результата в третий. */
- concat([], L, L).
- concat([X1 | L1], L2, [X1 | L3]):- concat(L1, L2, L3).
- /* Задание 2. Инверсия списка. */
- invert([], []).
- invert(L1, L2):- invert(L1, [], L2).
- invert([], L2, L2).
- invert([X1 | L1], Acc, L2):- invert(L1, [X1|Acc], L2).
- /* Задание 3. Поиск уникальных значений в списке. */
- ucat([], []).
- ucat(L1, L2):-
- ucat(L1, [], L2),
- !.
- ucat([], RES, L2):- invert(RES, L2).
- ucat([X1 | L1], Acc, L2):-
- member(X1, Acc),
- ucat(L1, Acc, L2).
- ucat([X1 | L1], Acc, L2):- ucat(L1, [X1 | Acc], L2).
- /* Задание 4. Внесение уникальных элементов L1 и L2 в L3 */
- ucat3(L1, L2, L3):-
- concat(L1, L2, CONC),
- ucat(CONC, L3).
- /* Задание 5. Почленное применение операции к элементам двух списков
- mapop(Op, L1, L2, L3):- mapop(Op, L1, L2, [], L3).
- mapop(_, [], [], RES, L3):-
- invert(RES, L3),
- !.
- mapop(Op, [H1|T1], [H2|T2], Acc, L3):- OpRes is H1 + H2, write(OpRes), mapop(Op, T1, T2, [OpRes | Acc], L3). */
- %! Результат применения операции Op к i-ому элементу списков L1 и L2
- %
- mapop(Op,L1,L2,L3):-mathop(Op,L1,L2,L3).
- mathop(_,[],[],[]):-!.
- mathop(Op,[H1|T1],[H2|T2],[HR|TR]):-Functor=..[Op,H1,H2],call(HR is Functor),mathop(Op,T1,T2,TR).
- /* Задание 6. Flatten вложеный список */
- unbr([], []):- !.
- unbr([H|T], L2):-
- !,
- unbr(H, FlatH),
- unbr(T, FlatT),
- concat(FlatH, FlatT, L2).
- unbr(L, [L]).
- /* Задание 7. Просуммировать значения во всех подсписках вложенного списка */
- %! Сумма элементов списка
- %
- sum_list([], 0).
- sum_list([H|T], Sum):-
- sum_list(T, Sum1),
- Sum is Sum1 + H.
- msum(L1, L2):- msum(L1, [], L2).
- msum([], RES, L2):-
- invert(RES, L2),
- !.
- msum([H|T], Acc, L2):-
- sum_list(H, S),
- msum(T, [S|Acc], L2).
- /* Задание 8. Поиск пути в лабиринте */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement