0

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

K = [1,2,3 | X].

K = [1,2,3,X].

Bratko 书中的问题实际上是在conc.

浓度定义为:

conc([], L, L).
conc([X|L1], L2, [X|L3]) :- conc(L1, L2, L3).

现在的实际问题是

conc([1,2,3], [X], L2).

L2 与查询中的 K 相同的列表 K = [1,2,3|X].

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

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

4

1 回答 1

2

在 Prolog 中,每个列表要么是空列表 ( []),要么是头尾 ( [A | X])。头是第一个元素,尾是列表的其余部分。

例子:

  • [1]实际上是[1 | []]
  • [1, 2][1 | [2 | []]]
  • [1,2,3 | [4, 5]][1,2,3,4,5](与 4-element list 不同[1,2,3,[4,5]])相同。

所以在你的例子L2[1,2,3,X],这是最后一个元素的四元素列表X。同时Kis [1,2,3|X]which 是一个以 开头1,2,3且包含 的所有元素的列表X

[1,2,3,X]下图显示了和的结构之间的区别[1,2,3|X][1,2,3,X] 与 [1,2,3|X]

于 2013-10-20T15:27:56.160 回答