Prolog:获取两个元素的列表,当且仅当第一个元素与第二个元素相同时才返回true

时间:2012-12-05 15:17:19

标签: list prolog duplicates

我是一名新手prolog程序员,对于一项任务,我必须有一个基本程序,当且仅当列表X是两个元素的列表时,第一个与第二个元素相同。

从我对prolog的看法来看,程序看起来很小,所以我输入了:

firstPair(x,x).

当我在swipl下运行时,我将其作为输出:

Syntax error: Operator expected

还有什么需要做的吗?我想如果我用firstPair(1,2)执行此操作。这就是它需要知道它是错误的。

2 个答案:

答案 0 :(得分:3)

首先,小写x不是变量,它是 atom 。使x大写以解决问题:

firstPair(X,X).

其次,您不要在解释器中输入此内容。而是将其写入文件firstPair.pl,然后将该文件读入Prolog。

在命令提示符下,键入:

['firstPair.pl'].

按Enter键。现在,您可以使用firstPair/2规则。

最后,由于作业谈论列表,我认为教师希望你写firstPair/1,而不是firstPair/2

firstPair([X,X]).

答案 1 :(得分:0)

您的计划/事实

firstPair(X,X).
如果给出的两个参数可以统一

将成功,无论它们是列表,原子,变量等。为了满足您的规范,

  当且仅当列表X是两个元素的列表时,

成功的程序,   第一个与第二个相同。

你需要这样的东西:

list_of_two_elements( [X,X] ).

如果传递的单个术语(或可以与之统一)两个元素的列表(通过统一,或者可以通过统一,相同),这将成功。例如,以下所有内容都将成功:

  • list_of_two_elements( X ).

    成功时,变量X将与包含相同未绑定变量的两个元素的列表统一,如[V1,V1]

  • list_of_two_elements( [1,1] ).

  • list_of-two_elements( [1,X] ).(成功时,X此处将与整数1统一。)