我是一个新手 prolog 程序员,对于一个任务,我必须有一个基本程序,当且仅当列表 X 是两个元素的列表时成功,第一个元素与第二个元素相同。
从我的序言来看,程序似乎很小,所以我输入了这个:
firstPair(x,x).
当我在 swipl 下运行它时,我得到这个作为输出:
Syntax error: Operator expected
还有什么需要做的吗?我想如果我执行这个,比如 firstPair(1,2)。这就是它需要知道它是假的。
我是一个新手 prolog 程序员,对于一个任务,我必须有一个基本程序,当且仅当列表 X 是两个元素的列表时成功,第一个元素与第二个元素相同。
从我的序言来看,程序似乎很小,所以我输入了这个:
firstPair(x,x).
当我在 swipl 下运行它时,我得到这个作为输出:
Syntax error: Operator expected
还有什么需要做的吗?我想如果我执行这个,比如 firstPair(1,2)。这就是它需要知道它是假的。
首先,小写字母x
不是一个变量,它是一个原子。大写x
以解决问题:
firstPair(X,X).
其次,您不要将其输入到解释器中。相反,您将它写入一个文件firstPair.pl
,然后将该文件读入 Prolog。
在命令提示符下,键入:
['firstPair.pl'].
按回车。现在你可以使用你的firstPair/2
规则了。
最后,由于作业谈到列表,我认为导师希望你写firstPair/1
,而不是firstPair/2
:
firstPair([X,X]).
你的程序/事实
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
。)