Prolog:如果列表中有重复元素(不连续),如何进行detirmine

时间:2018-03-29 10:30:37

标签: prolog

我想知道如何编写一个谓词/ 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

任何想法?

1 个答案:

答案 0 :(得分:2)

一种简单的方法是:

duplicate(List):-
 append(X,Y,List),
 member(M,X),
 member(M,Y). 

列表包含重复元素,如果您可以将其拆分为两个列表,并且这两个列表都有相同的成员。

由于prolog没有函数,声明性名称会更好。

我使用了内置成员/ 2并附加/ 3但是如果你坚持你可以轻松查找这些的定义。

相关问题