**FACTS**
player(milan,[seedorf,zambrotta,gattuso]).
player(inter,[seedorf,ronaldo,zambrotta]).
player(realmadrid,[seedorf,zidane,ronaldo]).
я хочу создать такой предикат, чтобы:
find (TEAM, PLAYERS)
и если моя цель - найти (X, Y), он вернет список команд, X, и список игроков, Y, без каких-либо дубликатов ... Как показано ниже:
X=[milan], Y=[seedorf,zambrotta,gattuso];
X=[inter], Y=[seedorf,ronaldo,zambrotta];
X=[realmadrid], Y=[seedorf,zidane,ronaldo];
X=[milan,inter] Y=[seedorf,zambrotta];
X=[milan,realmadri] Y=[seedorf];
...
X=[milan,inter,realmadrid] Y=[seedorf];
...
Я пытаюсь сделать это, но он дает «ОШИБКА: вне локального стека». Если я не использую предикат remove_dups, список команд «X» будет иметь дубликаты, и программа не может остановиться ... продолжайте, как X = [милан, милан, милан, милан, интер] .... Как я могу исправить этот код. ?:
find([X], Y) :- player(X1, Y),remove_dups(X1,X).
find([X|Xs], Y) :- player(X1, Y0),find(Xs, Y3), intersection(Y0, Y3, Y),remove_dups(X1,X).
remove_dups([],[]).
remove_dups([First|Rest],NewRest):-member(First, Rest),remove_dups(Rest, NewRest).
remove_dups([First|Rest],[First|NewRest]):-not(member(First, Rest)),remove_dups(Rest, NewRest).
Большое спасибо...