Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- %2 Создаю новый список с помощью своего 'reverse',далее сверяю его с другим в другом предикате
- reversed(Lst1,Lst2):-
- reverse(Lst2,New,Lst1).
- reverse(Lst2,New,Lst1):-
- [H2|T2]=Lst2,
- [Hn|Tn]=New,
- (
- Lst2=[],!,main(Lst1,New);
- reverse(T2,[H2|New],Lst1)
- ).
- main(Lst1,Lst2):-
- [H1|T1]=Lst1,
- [H2|T2]=Lst2,
- H1 is H2,main(T1,T2);
- Lst1=[].
- %#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=[].
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement