首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Prolog :如果列表中有重复元素(不是连续的),如何去除

Prolog :如果列表中有重复元素(不是连续的),如何去除
EN

Stack Overflow用户
提问于 2018-03-29 10:30:37
回答 1查看 1.2K关注 0票数 2

我想知道如何编写谓词/1,以确定给定列表是否具有重复项,还是没有预定义/内置谓词是唯一的。

myFunc(a,b,c,d) =真

myFunc(a,b,a,d) = false

到目前为止,我得到的是:

代码语言:javascript
运行
复制
myFunc([X|Y]) :- helpFunc(Y,X).
myFunc([]).
helpFunc([],_).
helpFunc([Y|X], Y) :- helpFunc(X,Y).

只有在列表中有连续的重复元素时,才会返回true。

例如。

myFunc(1,3,a,4,b) = false ->应返回true

myFunc(1,3,a,3,b) = false ->应返回false

--

myFunc(3,3,3,3) =真

有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-29 10:54:44

一个简单的方法是:

代码语言:javascript
运行
复制
duplicate(List):-
 append(X,Y,List),
 member(M,X),
 member(M,Y). 

如果可以将列表拆分为两个列表,并且这两个列表的成员是相同的,则列表具有重复的元素。

由于prolog没有函数,所以最好使用声明性名称。

我使用了内置成员/2和追加/3,但如果您坚持,您可以轻松地查找这些定义。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49553804

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档