Я совершенно новичок в Prolog и пробую некоторые упражнения. Один из них:
Напишите набор предикатов (InList, OutList) который принимает на вход произвольное список и возвращает список, в котором каждый элемент списка ввода появляется только один раз.
Вот мое решение:
member(X,[X|_]).
member(X,[_|T]) :- member(X,T).
set([],[]).
set([H|T],[H|Out]) :-
not(member(H,T)),
set(T,Out).
set([H|T],Out) :-
member(H,T),
set(T,Out).
Мне не разрешено использовать какие-либо встроенные предикаты (лучше даже не использовать not/1
). Проблема в том, что set/2
дает несколько одинаковых решений. Чем больше повторений в списке входных данных, тем больше решений. Что я делаю не так? Спасибо заранее.