以下两个Prolog列表之间有什么区别?

时间:2013-10-20 14:57:34

标签: prolog

我对下面两个列表的区别感到困惑:

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].

中的K相同

我不认为L2和K是相同的,但我不太确定如何解释它。 L2是两个列表的串联。 K是我不确定的变量X的连接,可以通过列表填充......

还在学习Prolog,请原谅我,如果这是一个'愚蠢'的问题。

1 个答案:

答案 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]的结构之间的差异。 [1,2,3,X] vs [1,2,3|X]