Prolog - 所有不同的列表不包括“_”变量

时间:2018-05-30 12:27:31

标签: list prolog

我需要在Prolog中执行一个函数,给定一个列表,检查每个成员是否不同。唯一的特点是它不能计算“_”变量。 这是我想要的一个例子:

na.rm = TRUE

我已经尝试使用以下函数,使用谓词“var”检查变量是否空闲,但它不起作用:

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

感谢您的帮助

PS:我正在使用GProlog

PS2:我知道函数fd_all_different可以工作,但我宁愿自己实现

1 个答案:

答案 0 :(得分:2)

由于@false解决了问题:

对于那些想知道如何,这里的“独特”功能:

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

unique([]).
unique([T|Q]) :- maplist(dif(T), Q), unique(Q).