我对下面两个列表的区别感到困惑:
K = [1,2,3 | X].
和
K = [1,2,3,X].
布拉特科书中的问题实际上是在conc
。
conc定义为:
conc([], L, L).
conc([X|L1], L2, [X|L3]) :- conc(L1, L2, L3).
现在的实际问题是如果在
conc([1,2,3], [X], L2).
L2与查询K = [1,2,3|X].
我不认为L2和K是相同的,但我不太确定如何解释它。 L2是两个列表的串联。 K是我不确定的变量X的连接,可以通过列表填充......
还在学习Prolog,请原谅我,如果这是一个'愚蠢'的问题。
答案 0 :(得分:2)
在Prolog中,每个列表都是空列表([]
)或头部和尾部([A | X]
)。 Head是第一个元素,tail是列表的其余部分。
示例:
[1]
实际上是[1 | []]
[1, 2]
是[1 | [2 | []]]
[1,2,3 | [4, 5]]
与[1,2,3,4,5]
相同(与4个元素列表[1,2,3,[4,5]]
不同)。因此,在您的示例中L2
是[1,2,3,X]
,这是带有最后一个元素X
的四个元素列表。同时K
为[1,2,3|X]
,这是一个以1,2,3
开头并且包含X
所有元素的列表。
下图显示[1,2,3,X]
和[1,2,3|X]
的结构之间的差异。