Advertisement
ktv6

Lab2_Predicates

Oct 29th, 2019
500
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Prolog 2.16 KB | None | 0 0
  1. /*  Задание 1. Конкатенация двух списков с сохранением результата в третий. */
  2. concat([], L, L).
  3. concat([X1 | L1], L2, [X1 | L3]):-  concat(L1, L2, L3).
  4.  
  5.  
  6. /*  Задание 2. Инверсия списка. */
  7. invert([], []).
  8. invert(L1, L2):- invert(L1, [], L2).
  9. invert([], L2, L2).
  10. invert([X1 | L1], Acc, L2):- invert(L1, [X1|Acc], L2).
  11.  
  12. /*  Задание 3. Поиск уникальных значений в списке. */
  13. ucat([], []).
  14. ucat(L1, L2):-  
  15.     ucat(L1, [], L2),
  16.     !.
  17.  
  18. ucat([], RES, L2):- invert(RES, L2).
  19.  
  20. ucat([X1 | L1], Acc, L2):-
  21.     member(X1, Acc),
  22.     ucat(L1, Acc, L2).
  23.  
  24. ucat([X1 | L1], Acc, L2):-  ucat(L1, [X1 | Acc], L2).
  25.    
  26. /* Задание 4. Внесение уникальных элементов L1 и L2 в L3 */
  27. ucat3(L1, L2, L3):-
  28.     concat(L1, L2, CONC),
  29.     ucat(CONC, L3).
  30.  
  31. /* Задание 5. Почленное применение операции к элементам двух списков
  32. mapop(Op, L1, L2, L3):- mapop(Op, L1, L2, [], L3).
  33. mapop(_, [], [], RES, L3):-
  34.     invert(RES, L3),
  35.     !.
  36.  
  37. mapop(Op, [H1|T1], [H2|T2], Acc, L3):- OpRes is H1 + H2, write(OpRes), mapop(Op, T1, T2, [OpRes | Acc], L3). */
  38.  
  39. %! Результат применения операции Op к i-ому элементу списков L1 и L2
  40. %
  41. mapop(Op,L1,L2,L3):-mathop(Op,L1,L2,L3).
  42.  
  43. mathop(_,[],[],[]):-!.
  44. mathop(Op,[H1|T1],[H2|T2],[HR|TR]):-Functor=..[Op,H1,H2],call(HR is Functor),mathop(Op,T1,T2,TR).
  45.  
  46. /* Задание 6. Flatten вложеный список */
  47. unbr([], []):- !.
  48. unbr([H|T], L2):-  
  49.     !,
  50.     unbr(H, FlatH),
  51.     unbr(T, FlatT),
  52.     concat(FlatH, FlatT, L2).
  53.    
  54. unbr(L, [L]).
  55.  
  56. /*  Задание 7. Просуммировать значения во всех подсписках вложенного списка    */
  57.  
  58. %!  Сумма элементов списка 
  59. %
  60. sum_list([], 0).
  61. sum_list([H|T], Sum):- 
  62.     sum_list(T, Sum1),
  63.     Sum is Sum1 + H.
  64.  
  65. msum(L1, L2):- msum(L1, [], L2).
  66. msum([], RES, L2):-
  67.     invert(RES, L2),
  68.     !.
  69. msum([H|T], Acc, L2):-
  70.     sum_list(H, S),
  71.     msum(T, [S|Acc], L2).
  72.  
  73. /*  Задание 8.   Поиск пути в лабиринте   */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement