Мне нужно сделать функцию в Прологе, которая, учитывая список, проверяет, все ли члены разные.Единственная особенность заключается в том, что он не должен считать «_» переменные.Вот пример того, что я хочу:
unique([3,1,2]).
> true
unique([3,1,2,_]).
> true
unique([3,1,2,_,_,_]).
> true
unique([3,1,2,1]).
> false
unique([3,1,2,1,_]).
> false
Я уже пробовал использовать следующую функцию, используя предикат "var", чтобы проверить, свободна ли переменная или нет, но она не работает:
element(X,[X|_]) :- !.
element(X,[_|Q]) :- element(X,Q).
unique([]).
unique([_,[]]).
unique([T,Q]) :- var(T), unique(Q), !.
unique([T|Q]) :- \+element(T,Q),unique(Q).
Спасибо за вашу помощь
PS: я использую GProlog
PS2: я знаю, что функция fd_all_different моглаработать, но я бы предпочел реализовать это сам