【问题标题】:List check that elements are different列表检查元素是否不同
【发布时间】:2014-05-23 05:53:05
【问题描述】:

我想写一个谓词 different_from(Xs,X),当且仅当 X 不同于列表 Xs 的所有元素时,它才会成功。

所以查询

different_from([3,2,5],4)

应该会成功,但是下面的查询应该会失败:

different_from([3,2,5],2)

由于谓词是一个检查,它不应该实例化它的任何一个参数。

提前感谢您提供的任何帮助。

【问题讨论】:

  • different_from(Xs, X) :- maplist(dif(X), Xs).

标签: prolog


【解决方案1】:

这是一个非常简单的规则,由两个子句组成:

  • 第一个子句说different_from在列表为空时成功,
  • 第二个子句表示当列表的第一个元素与正在搜索的元素不匹配时,different_from 成功,并且当尾部的 different_from 也成功时。

这是用 Prolog 语法编写的相同内容:

different_from([], _).
different_from([H|T], E) :- E \= H, different_from(T, E).

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-20
    • 2012-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-17
    相关资源
    最近更新 更多