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

Prolog如何使用类似append([Item],list)的谓词将新变量追加到列表中?,prolog,Prolog,我有一个关于将元素附加到给定列表的问题,我知道这可以通过3个变量谓词来完成:append([Item],list,[Item | list])。如果只使用两个变量,它也可以实现吗,比如附加([项目],列表),其中列表是现有列表?您需要3个元素:要添加的元素、没有元素的列表、这些元素的串联。那么你不能只使用2个元素 请注意,append([Item]、List、Result)可以更方便地编写[Item | List]=Result,而Item将是Result的第一个元素。那你就不会追加了。您可以使

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

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


请注意,
append([Item]、List、Result)
可以更方便地编写
[Item | List]=Result
,而
Item
将是Result的第一个元素。那你就不会追加了。您可以使用
append(列表,[Item],结果)
capelical的答案完全正确。为了清楚起见,我只想补充一点,Prolog谓词并不像其他语言中的函数或过程那样具有返回值。这背后有多种原因(关于逻辑编程的文章也很多)。现在,请记住,像
append/3
这样的谓词的优势在于它不仅可以附加两个列表以形成一个新列表,还可以将列表一分为二:

?- append(Start, [c,d,e], [a,b,c,d,e]).
或者甚至枚举列表的所有可能拆分(非确定性):


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

谢谢,这对我很有帮助!
?- append(X,Y,[a,b,c]).