Advertisement
PonaFly

n0 too

Sep 20th, 2016
239
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Prolog 3.46 KB | None | 0 0
  1.  %#1
  2. checkfirst(N,Lst1):-
  3. [H|T]=Lst1,N=:=H.
  4. checksecond(N,Lst1):-
  5. [H,S|T]=Lst1,N=:=S.
  6.  
  7. %2 Создаю новый список ,далее сверяю его с другим в другом предикате
  8. reversed(Lst1,Lst2):-
  9. tonew(Lst2,New,Lst1).
  10.  
  11. tonew(Lst2,New,Lst1):-
  12. (Lst2=[],!,check(New,Lst1));
  13. (Lst2=[H|T],New1 = [H|New],tonew(T,New1,Lst1)).
  14. check(Lst1,Lst2):-
  15. (Lst1=[],Lst2=[],!);
  16. (Lst1=[H1|T1],Lst2=[H2|T2],H1 is H2,check(T1,T2)).
  17.  
  18. %№3
  19.  symmetry(Lst):-
  20.  reverse(Lst,A),A=Lst.
  21.  
  22.  
  23. %#5a 5а сдал в аудитории
  24.  
  25. beginning(Lst1,Lst2):-
  26. [H1|T1]=Lst1,
  27. [H2|T2]=Lst2,
  28. H1 = H2,beginning(T1,T2),!;
  29. Lst1 = [].
  30.  
  31. %#5 b Используя предикат из задачи 5а я каждый раз проверяю вхождение списка меньше
  32. % с 1э-та бОльшего списка,иначе укорачиваю больший и проверяю заново.
  33. insert(Lst1,Lst2):-
  34. [H1|T1]=Lst1,
  35. [H2|T2]=Lst2,
  36. (
  37. Lst2=[_|_],beginning(Lst1,Lst2),!;
  38. Lst2=[_|_],insert(Lst1,T2)
  39.  ).
  40.  
  41. %#6 Вроде как работает.Каждый раз нахожу меньший элемент среди начал списков,проверяю на соответсвие
  42. %в другом списке(Lst3).Если список(1-2) пуст,то проверяю другой на полную идентичность остатку списка слияния
  43. checksorted(Lst1,Lst2,Lst3):-
  44. Lst1=[],!,beginning1(Lst2,Lst3);
  45.  Lst2=[],!,beginning1(Lst1,Lst3);(
  46. [H1|T1]=Lst1,
  47. [H2|T2]=Lst2,
  48. [H3|T3]=Lst3,
  49. (
  50. H1>=H2,H3=:=H2,!,checksorted(Lst1,T2,T3);
  51. H2>H1,H3=:=H1,!,checksorted(T1,Lst2,T3)
  52. )).
  53. beginning1(Lst1,Lst2):-
  54. [H1|T1]=Lst1,
  55. [H2|T2]=Lst2,
  56. H1 = H2,beginning1(T1,T2),!;
  57. Lst1 = [],Lst2=[].
  58.  
  59. %#4
  60. %проверка на простоту.с 1 пары
  61.   prime(N):-
  62.   integer(N),N>1,K is sqrt(N),check(N,K,2).
  63.  
  64.   check(N,K,I):-  
  65. (I>K,!;  
  66.  (0 =\= N mod I,I1 is I+1,check(N,K,I1))
  67.  ).
  68.  
  69. % Расписал все возможные случаи-два списка пусты,меньший пуст,два не пусты и Н1 простое,два не пусты
  70. % и Н1 не простое.unprime-проверка на составное число
  71. unprime(A) :- \+ prime(A).
  72. oneinAn(Lst1,Lst2):-
  73. (
  74. Lst1=[],Lst2=[],!
  75. );
  76. (
  77. Lst1=[H1|T1],
  78. Lst2=[],unprime(H1),!,oneinAn(T1,Lst2)
  79. );
  80. (
  81. Lst2=[H2|T2],Lst1=[H1|T1],prime(H1),H1 is H2,!,oneinAn(T1,T2)
  82. );
  83. (Lst1=[H1|T1],unprime(H1),oneinAn(T1,Lst2)).
  84.  
  85.  %№7
  86.  %%1 переворачиваю,потом создаю из списка число,сравниваю.
  87. numlst1(N,Lst):-
  88. reverse(Lst,New),
  89. check(N,0,New,1).
  90.  
  91. check(N,A,Lst,K):-
  92. integer(A),integer(K),
  93. (Lst=[],!,N is A);
  94. Lst=[H|T],
  95. A1 is (A+H*K),K1 is K*10,check(N,A1,T,K1).
  96.  
  97. %так и не понял почему без фикса он считает список сначала как _23
  98. % Уменьшаю N,Накапливаю остатки от деления на 10 в списке,при н=0 вывожу результат.
  99. numlst2(N,Lst):-
  100. fix_23(N,Lst,0).
  101. fix_23(N,Lst,K):-
  102. (K=0,!,fix_23(N,[],1));
  103. (N is 0,!,write(Lst));
  104. (M is N mod 10,N1 is  N div 10,fix_23(N1,[M|Lst],1)).
  105.  
  106. %Пользуюсь предикатом из варианта Б.посылаю с начальным значением 1,он выполняется,увеличиваю счетчик
  107. % и снова его запускаю.
  108. numlst3(N,Lst):-
  109. main(1).
  110. main(K):-
  111. fix_23(K,[],1);
  112. (K1 is K+1,main(K1)).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement