0

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

从我的序言来看,程序似乎很小,所以我输入了这个:

firstPair(x,x).

当我在 swipl 下运行它时,我得到这个作为输出:

Syntax error: Operator expected

还有什么需要做的吗?我想如果我执行这个,比如 firstPair(1,2)。这就是它需要知道它是假的。

4

2 回答 2

3

首先,小写字母x不是一个变量,它是一个原子。大写x以解决问题:

firstPair(X,X).

其次,您不要将其输入到解释器中。相反,您将它写入一个文件firstPair.pl,然后将该文件读入 Prolog。

在命令提示符下,键入:

['firstPair.pl'].

按回车。现在你可以使用你的firstPair/2规则了。

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

firstPair([X,X]).
于 2012-12-05T15:20:09.243 回答
0

你的程序/事实

firstPair(X,X).

如果给定的两个参数可以统一,则将成功,无论它们是列表、原子、变量等。为了满足您的规范,a

程序成功当且仅当列表 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。)

于 2012-12-05T17:15:49.710 回答