SWI Prolog: составить второй список из элементов первого так, чтобы элементы не повторялись - Prolog

Формулировка задачи:

Прошу помогите!!! я перепробовала множество вариантов, но никак не могу исправить ошибку. Задача составить произвольный список (первый), (второй список) составить из элементов первого списка, но так чтобы элементы не повторялись. На эту задачу есть решение, но где -то ошибка:
 
p([],[]).
p([L],[L]).
p(L,[L|M],M).
p(L,[L|M],[L|Q]):-p(L,M,Q).
Дело в том, что когда я пишу в прологе так:p([a, b, c, d, d, a], [a, b, c, d]). либо :p([n,n,l,l,k,k])=p([n,l,k]) выдает false p(n,l,k)=p(n,l,k). только на это true

Код к задаче: «SWI Prolog: составить второй список из элементов первого так, чтобы элементы не повторялись - Prolog»

textual
% membercount(Elem, Count, List):- истина если Elem встречается в List ровно Count раз
membercount(_,0,[]).
membercount(Elem, CountNew,[OtherElem|List]) :-
       membercount(Elem, CountPrev, List),
       ((Elem == OtherElem, CountNew is CountPrev + 1);
       (Elem \== OtherElem, CountNew is CountPrev)).
% se(A,B,C) - истенен, если список C соответсвует сп ску после удаления всех вхождений элемента A
se(_,[].[]).
se(A,[A1|L1],L2):- se(A,L2,Lres), ( ( A == A1, L2 = Lres) : ( A\ ==A1, L2=[A1|Lred]) ).

8   голосов, оценка 4.250 из 5


СОХРАНИТЬ ССЫЛКУ