Prolog如何使用append([Item],List)这样的谓词将新变量追加到列表中?

时间:2013-04-10 10:41:13

标签: prolog

我有一个关于将元素附加到给定列表的问题,我知道这可以通过3变量谓词来完成:append([Item], List, [Item | List])。如何只使用两个变量,它是否也可以实现,如append([Item], List),其中List是现有列表?

2 个答案:

答案 0 :(得分:1)

CapelliC的回答是完全正确的。为清楚起见,我只想添加Prolog谓词没有其他语言中的函数或过程的返回值。这背后有多种原因(并且有很多关于逻辑编程的文章)。现在,请记住,像append/3这样的谓词的强度在于它不仅可以附加两个列表来形成新列表,还可以将列表拆分为两个:

?- append(Start, [c,d,e], [a,b,c,d,e]).

甚至列举列表的所有可能拆分(非确定性):

?- append(X,Y,[a,b,c]).

完全实例化的列表,如[a,b,c](不包含变量),不能在Prolog谓词的上下文中更改。您只能实例化一个新列表,在append的情况下,该列表具有其他元素。

答案 1 :(得分:0)

您需要3个元素:要添加的元素,没有元素的列表,这些元素的串联。那么你不能只用2个元素。

请注意,append([Item], List, Result)可以更方便地编写[Item|List] = ResultItem将是结果的第一个元素。然后你追加。您可以使用append(List, [Item], Result)