Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- %#1
- checkfirst(N,Lst1):-
- [H|T]=Lst1,N=:=H.
- checksecond(N,Lst1):-
- [H,S|T]=Lst1,N=:=S.
- %2 Создаю новый список ,далее сверяю его с другим в другом предикате
- reversed(Lst1,Lst2):-
- tonew(Lst2,New,Lst1).
- tonew(Lst2,New,Lst1):-
- (Lst2=[],!,check(New,Lst1));
- (Lst2=[H|T],New1 = [H|New],tonew(T,New1,Lst1)).
- check(Lst1,Lst2):-
- (Lst1=[],Lst2=[],!);
- (Lst1=[H1|T1],Lst2=[H2|T2],H1 is H2,check(T1,T2)).
- %№3
- symmetry(Lst):-
- reverse(Lst,A),A=Lst.
- %#5a 5а сдал в аудитории
- beginning(Lst1,Lst2):-
- [H1|T1]=Lst1,
- [H2|T2]=Lst2,
- H1 = H2,beginning(T1,T2),!;
- Lst1 = [].
- %#5 b Используя предикат из задачи 5а я каждый раз проверяю вхождение списка меньше
- % с 1э-та бОльшего списка,иначе укорачиваю больший и проверяю заново.
- insert(Lst1,Lst2):-
- [H1|T1]=Lst1,
- [H2|T2]=Lst2,
- (
- Lst2=[_|_],beginning(Lst1,Lst2),!;
- Lst2=[_|_],insert(Lst1,T2)
- ).
- %#6 Вроде как работает.Каждый раз нахожу меньший элемент среди начал списков,проверяю на соответсвие
- %в другом списке(Lst3).Если список(1-2) пуст,то проверяю другой на полную идентичность остатку списка слияния
- checksorted(Lst1,Lst2,Lst3):-
- Lst1=[],!,beginning1(Lst2,Lst3);
- Lst2=[],!,beginning1(Lst1,Lst3);(
- [H1|T1]=Lst1,
- [H2|T2]=Lst2,
- [H3|T3]=Lst3,
- (
- H1>=H2,H3=:=H2,!,checksorted(Lst1,T2,T3);
- H2>H1,H3=:=H1,!,checksorted(T1,Lst2,T3)
- )).
- beginning1(Lst1,Lst2):-
- [H1|T1]=Lst1,
- [H2|T2]=Lst2,
- H1 = H2,beginning1(T1,T2),!;
- Lst1 = [],Lst2=[].
- %#4
- %проверка на простоту.с 1 пары
- prime(N):-
- integer(N),N>1,K is sqrt(N),check(N,K,2).
- check(N,K,I):-
- (I>K,!;
- (0 =\= N mod I,I1 is I+1,check(N,K,I1))
- ).
- % Расписал все возможные случаи-два списка пусты,меньший пуст,два не пусты и Н1 простое,два не пусты
- % и Н1 не простое.unprime-проверка на составное число
- unprime(A) :- \+ prime(A).
- oneinAn(Lst1,Lst2):-
- (
- Lst1=[],Lst2=[],!
- );
- (
- Lst1=[H1|T1],
- Lst2=[],unprime(H1),!,oneinAn(T1,Lst2)
- );
- (
- Lst2=[H2|T2],Lst1=[H1|T1],prime(H1),H1 is H2,!,oneinAn(T1,T2)
- );
- (Lst1=[H1|T1],unprime(H1),oneinAn(T1,Lst2)).
- %№7
- %%1 переворачиваю,потом создаю из списка число,сравниваю.
- numlst1(N,Lst):-
- reverse(Lst,New),
- check(N,0,New,1).
- check(N,A,Lst,K):-
- integer(A),integer(K),
- (Lst=[],!,N is A);
- Lst=[H|T],
- A1 is (A+H*K),K1 is K*10,check(N,A1,T,K1).
- %так и не понял почему без фикса он считает список сначала как _23
- % Уменьшаю N,Накапливаю остатки от деления на 10 в списке,при н=0 вывожу результат.
- numlst2(N,Lst):-
- fix_23(N,Lst,0).
- fix_23(N,Lst,K):-
- (K=0,!,fix_23(N,[],1));
- (N is 0,!,write(Lst));
- (M is N mod 10,N1 is N div 10,fix_23(N1,[M|Lst],1)).
- %Пользуюсь предикатом из варианта Б.посылаю с начальным значением 1,он выполняется,увеличиваю счетчик
- % и снова его запускаю.
- numlst3(N,Lst):-
- main(1).
- main(K):-
- fix_23(K,[],1);
- (K1 is K+1,main(K1)).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement