Advertisement
PonaFly

n2

Sep 19th, 2016
221
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Prolog 1.64 KB | None | 0 0
  1. %2 Создаю новый список с помощью своего 'reverse',далее сверяю его с другим в другом предикате
  2. reversed(Lst1,Lst2):-
  3. reverse(Lst2,New,Lst1).
  4.  
  5. reverse(Lst2,New,Lst1):-
  6. [H2|T2]=Lst2,
  7. [Hn|Tn]=New,
  8. (
  9. Lst2=[],!,main(Lst1,New);
  10. reverse(T2,[H2|New],Lst1)
  11. ).
  12.  
  13. main(Lst1,Lst2):-
  14. [H1|T1]=Lst1,
  15. [H2|T2]=Lst2,
  16. H1 is H2,main(T1,T2);
  17. Lst1=[].
  18.  
  19.  
  20. %#5a 5а сдал в аудитории
  21.  
  22. beginning(Lst1,Lst2):-
  23. [H1|T1]=Lst1,
  24. [H2|T2]=Lst2,
  25. H1 = H2,beginning(T1,T2),!;
  26. Lst1 = [].
  27.  
  28. %#5 b Используя предикат из задачи 5а я каждый раз проверяю вхождение списка меньше
  29. % с 1э-та бОльшего списка,иначе укорачиваю больший и проверяю заново.
  30. insert(Lst1,Lst2):-
  31. [H1|T1]=Lst1,
  32. [H2|T2]=Lst2,
  33. (
  34. Lst2=[_|_],beginning(Lst1,Lst2),!;
  35. Lst2=[_|_],insert(Lst1,T2)
  36.  ).
  37.  
  38. %#6 Вроде как работает.Каждый раз нахожу меньший элемент среди начал списков,проверяю на соответсвие
  39. %в другом списке(Lst3).Если список(1-2) пуст,то проверяю другой на полную идентичность остатку списка слияния
  40. checksorted(Lst1,Lst2,Lst3):-
  41. Lst1=[],!,beginning1(Lst2,Lst3);
  42.  Lst2=[],!,beginning1(Lst1,Lst3);(
  43. [H1|T1]=Lst1,
  44. [H2|T2]=Lst2,
  45. [H3|T3]=Lst3,
  46. (
  47. H1>=H2,H3=:=H2,!,checksorted(Lst1,T2,T3);
  48. H2>H1,H3=:=H1,!,checksorted(T1,Lst2,T3)
  49. )).
  50. beginning1(Lst1,Lst2):-
  51. [H1|T1]=Lst1,
  52. [H2|T2]=Lst2,
  53. H1 = H2,beginning1(T1,T2),!;
  54. Lst1 = [],Lst2=[].
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement