Пролог - Весь другой список, не считая переменную "_" - PullRequest
0 голосов
/ 30 мая 2018

Мне нужно сделать функцию в Прологе, которая, учитывая список, проверяет, все ли члены разные.Единственная особенность заключается в том, что он не должен считать «_» переменные.Вот пример того, что я хочу:

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 моглаработать, но я бы предпочел реализовать это сам

1 Ответ

0 голосов
/ 31 мая 2018

Проблема решена благодаря @false:

Для тех, кому интересно, вот "уникальная" функция:

dif(X,Y) :- X \== Y.

unique([]).
unique([T|Q]) :- maplist(dif(T), Q), unique(Q).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...