我是一名新手prolog程序员,对于一项任务,我必须有一个基本程序,当且仅当列表X是两个元素的列表时,第一个与第二个元素相同。
从我对prolog的看法来看,程序看起来很小,所以我输入了:
firstPair(x,x).
当我在swipl下运行时,我将其作为输出:
Syntax error: Operator expected
还有什么需要做的吗?我想如果我用firstPair(1,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
统一。)