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