LRA*_*RAC 2 list prolog prolog-dif
编写一个谓词,allDistinct/1
其参数是符号列表,如果列表中的所有符号都不同,则成功.
notin(A,[]).
notin(A,[B|C]) :-
A\=B,
notin(A,C).
allDistinct([]).
allDistinct([_]).
allDistinct([A|B]) :-
notin(A,B),
allDistinct(B).
Run Code Online (Sandbox Code Playgroud)基于iwhen/2
我们可以简洁地定义distinct/1
如下:
:- use_module(library(lists), [same_length/2]).
distinct(Es) :-
iwhen(ground(Es), (sort(Es,Fs),same_length(Es,Fs))).
Run Code Online (Sandbox Code Playgroud)
使用SICStus Prolog 4.5.0的示例查询:
| ?- distinct([1,2,3]). yes | ?- distinct([1,2,3.0]). yes | ?- distinct([1,2,3.0,2]). no | ?- distinct([1,2,3.0,X]). ! error(instantiation_error,_283)