У меня возникли проблемы с удалением значений из списка в прологе. У меня есть список цветов, и я хочу добавить к нему список цветов и сохранить все значения, которые не имеют дубликатов, и удалить остальные.
[green, red, blue, purple, yellow, brown, orange, black, purple]
поэтому фиолетовый дважды появляется в этом списке, и я хочу удалить их оба. Это список, который я хочу вернуть.
[green, red, blue, yellow, brown, orange, black]
В настоящее время у меня есть это, чтобы удалить все дубликаты, но я не могу получить оба пурпура.
mymember(X,[H|_]) :- X==H,!.
mymember(X,[_|T]) :- mymember(X,T).
not(A) :- \+ call(A).
set([],[]).
set([Head|Tail],[Head|Out]) :-
not(mymember(Head,Tail)),
set(Tail, Out).
set([Head|Tail],Out) :-
mymember(Head,Tail),
set(Tail, Out).
это результат, который я получаю сейчас:
[green, red, blue, yellow, brown, orange, black, purple]