列表检查元素是否不同

时间:2014-05-22 15:41:39

标签: prolog

我想编写一个谓词different_from(Xs,X),这是一个检查,当且仅当X与列表X的所有元素不同时才成功。

所以查询

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

应该会成功,但以下查询应该失败:

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

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

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

1 个答案:

答案 0 :(得分:2)

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

  • 第一个条款表示当列表为空时different_from成功,
  • 第二个条款表示当列表的第一个元素与被搜索的元素不匹配时,different_from成功,并且尾部的different_from也成功。

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

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