0

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

4

2 回答 2

1

CapelliC 的回答是完全正确的。为了清楚起见,我只想补充一点,Prolog 谓词不像其他语言的函数或过程那样具有返回值。这背后有多种原因(还有很多关于逻辑编程的文章)。现在,请记住,like 谓词的优势append/3在于它不仅可以附加两个列表以形成一个新列表,还可以将一个列表一分为二:

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

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

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

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

于 2013-04-10T11:23:25.420 回答
0

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

注意append([Item], List, Result)可以更方便地写[Item|List] = Result,并且Item会是 Result 的第一个元素。然后你没有追加。你可以做append(List, [Item], Result)

于 2013-04-10T11:05:38.443 回答