Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Prolog > Помогите пожалуйста создать два списка на Prolog?


Автор: strikelon88 6.10.2009, 21:40
помогите пожалуйста сделать два списка по прологу.
1)intersection(List1,List2,intersection)
Список intersection включает в себя элементы общие для списков List1 и List2
2)token(Token,List,Delimiters)
token представляет собой подсписок списка List ограниченный началом и концом списка и символами указанными в списке delimiters.

Автор: Грымзик 7.10.2009, 16:01
Не очень понятно: intersection включает в себя одинаковые элементы на
одинаковых местах, тогда

?- intersection([1,2,3,5,5],[5,4,3,5,5,1],X), write(X), nl, fail.

intersection(_,[],[]).
intersection([],_,[]).
intersection([X|Tail1],[X|Tail2],[X|I]):- intersection(Tail1,Tail2,I),!.
intersection([_|Tail1],[_|Tail2],I):- intersection(Tail1,Tail2,I).

или элементы, которые просто встречаются в обоих списках без повторения, тогда

?- intersection2([1,2,3,5,5],[5,4,3,5,5,1],X), write(X), nl, fail.

member(X,[X|_]).
member(X,[_|Tail]):-member(X,Tail).

intersection2([],_,[]).
intersection2([X|Tail],List,[X|I]):- not(member(X,Tail)), member(X,List), intersection2(Tail,List,I),!.
intersection2([_|Tail],List,I):- intersection2(Tail,List,I).

а вот token

?- token(X,[a,b,c,d,a,c],[a,c]), write(X), nl, fail.

member(X,[X|_]).
member(X,[_|Tail]):-member(X,Tail).

append([],A,A).
append([X|Tail],A,[X|NewTail]):- append(Tail,A,NewTail).

token(Token,List,Delimiters):- member(D1,Delimiters),  member(D2, Delimiters), append(_,[D1|Tail],List),
append(Token,[D2|_],Tail).
token(Token,List,Delimiters):- member(D1,Delimiters),  append(_,[D1|Token],List).
token(Token,List,Delimiters):- member(D2, Delimiters), append(Token,[D2|_],List).

Автор: strikelon88 8.10.2009, 19:39
БОЛЬШОЕ СПАСИБО!!! четвертый день сидел разбирался, все не получалось а prolog только ошибки выдавал=)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)