最近我开始研究 Prolog ,一旦我处理了它,我就有理解它的问题。
我正在研究列表,但我无法理解append/3
应该合并两个列表的谓词如何工作。
book_append([], L, L).
book_append([X|L1], L2, [X|L3]) :-
book_append(L1, L2, L3).
确切地说,我不明白如何L2
附加到主列表。我试着解释一下我到目前为止所理解的:
只有当第一个列表为空并且第二个和第三个将采用相同的值时,边界条件才会统一。这是对的吗?
第一个问题,也许这很愚蠢,当第一个列表为空时,两个列表必须统一,以便它们取相同的值。但它们应该是不同的,所以我会失去它们的价值之一。
在第二行中,第一个列表的头部被附加到第三个列表中并调用相同的函数。
我通常以这种方式使用此功能:book_append([1, 2, 3], [a, b, c], X).
第一行是假的,因为L1
它不是空的。
而第二个应该是:
book_append([1|[2, 3], [a, b, c], [1|L3]) :-
book_append([2, 3], [a, b, c], L3).
L3
在第一次通话期间(我已经知道它是第三个列表的尾部)的价值是多少?是空的吗?还是一个未实例化的变量?或者它被实例化为L2
?