我刚刚开始学习序言,所以这些可能是新手问题。 我的问题是这个。使用这两段代码,我会得到错误:
X = .(1,.(2,.(3,[]))).
.(X,Y) = [1,2,3].
我希望在第一行X=[1,2,3]
之后,第二行X=1
和Y=[2,3]
之后。
相反,我收到此错误:
ERROR: Arguments are not sufficiently instantiated
ERROR: In:
ERROR: [11] throw(error(instantiation_error,_3540))
ERROR: [9] '$dicts':'.'(_3570,_3572,_3574) at c:/program files/swipl/boot/dicts.pl:46
ERROR: [8] '<meta-call>'(user:(...,...)) <foreign>
ERROR: [7] <user>
ERROR:
ERROR: Note: some frames are missing due to last-call optimization.
ERROR: Re-run your program in debug mode (:- debug.) to get more detail.
我正在Windows 10上使用SWI-Prolog环境。为什么会发生这种情况?
答案 0 :(得分:1)
SWI-Prolog对列表做了一些不同的事情。它使用.
代替'[|]'
。因此,请举第一个示例:
?- X = .(1, .(2, .(3, []))).
并将每个.(A, B)
替换为'[|]'(A, B)
以获得:
?- X = '[|]'(1,'[|]'(2,'[|]'(3,[]))).
X = [1, 2, 3].
另一个变成:
?- '[|]'(X, Y) = [1, 2, 3].
X = 1,
Y = [2, 3].