我想知道如何编写一个谓词/ 1,它确定给定列表是否有重复项,或者是唯一的没有预定义/内置谓词?
myFunc([a,b,c,d])= true
myFunc([ a ,b, a ,d])= false
到目前为止我所拥有的是:
myFunc([X|Y]) :- helpFunc(Y,X).
myFunc([]).
helpFunc([],_).
helpFunc([Y|X], Y) :- helpFunc(X,Y).
仅当列表中有连续的重复元素时才返回true。
离。
myFunc([1,3,a,4,b])= false - >应该返回真实
myFunc([1, 3 ,a, 3 ,b])= false - >应该返回false
-
myFunc([ 3,3,3,3 ])= true
任何想法?
答案 0 :(得分:2)
一种简单的方法是:
duplicate(List):-
append(X,Y,List),
member(M,X),
member(M,Y).
列表包含重复元素,如果您可以将其拆分为两个列表,并且这两个列表都有相同的成员。
由于prolog没有函数,声明性名称会更好。
我使用了内置成员/ 2并附加/ 3但是如果你坚持你可以轻松查找这些的定义。