我有一个关于将元素附加到给定列表的问题,我知道这可以通过3变量谓词来完成:append([Item], List, [Item | List])
。如何只使用两个变量,它是否也可以实现,如append([Item], List)
,其中List是现有列表?
答案 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] = Result
,Item
将是结果的第一个元素。然后你不追加。您可以使用append(List, [Item], Result)