【问题标题】:Uniqueness of a number in a list in prologprolog中列表中数字的唯一性
【发布时间】:2019-03-06 22:13:32
【问题描述】:

到目前为止,我已经编写了这段代码(我在 Stack Overflow 中找到并稍作修改)

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

但这与我想要的完全相反。

例如,期望给出这些结果。

?- unique(1,[1,2,3]).
yes

?- unique(1,[1,2,3,1]).
no

但是,它给了

?- unique(1,[1,2,3]).
no

?- unique(1,[1,2,3,1]).
yes

有没有一种方法可以修改我的代码以获得所需的结果?

【问题讨论】:

    标签: list prolog unique


    【解决方案1】:

    您的代码实际上是说“如果 List 可以分成两部分 X 和 Y,并且 M 在 X 和 Y 中都存在,则 M 在 List 中是唯一的。”这是一种非常聪明的方法,可以与您想要的完全相反。

    这是另一种询问 X 在 List 中是否唯一的方法:如果我从 List 中取出 X,则 X 不再在 List 中。你可以像这样把它变成 Prolog:

    unique(X, List) :-
        select(X, List, ListWithoutX),
        \+ memberchk(X, ListWithoutX).
    

    【讨论】:

      猜你喜欢
      • 2011-05-23
      • 1970-01-01
      • 1970-01-01
      • 2023-01-26
      • 1970-01-01
      • 2012-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多