2012-10-31 27 views
7

我想在序言中添加一个项目到列表的末尾,但它始终失败。如何添加到序言列表的结尾

insertAtEnd(X,[ ],[X]). 
insertAtEnd(X,[H|T],[H|Z]) :- insertAtEnd(X,T,Z).  

letters([a,b,c]). 

我不明白为什么这下面不起作用。

insertAtEnd(d,letters(Stored),letters(Stored)). 

我也试图保存这份名单中整个存储着的变量,但我不知道上面是进行正确的方法。

+0

需要在列表末尾插入一个元素强烈建议您查看*差异列表*,这会给你O(1)插入。 –

回答

3

Prolog实现了一个关系计算模型,变量只能被实例化,没有被赋值。尝试

?- letters(Stored), 
    insertAtEnd(d, Stored, Updated), 
    write(Updated). 
+0

那么原始列表是不可编辑的?假设我收到另一封信e,我需要调用insertAtEnd(e,Updated,UpdatedAgain)?我正在尝试使用谓词来更新没有控制台的列表。 – MeowMeow

+1

是的,这是一种不寻常的计算方法。它与声明性编程密切相关。 Prolog找到适用的规则绑定变量,当它需要找到替代品时,它开始撤销先前建立的绑定。 – CapelliC

1

可以使用append ,把你的项目,作为第二列表

这样的:

insertAtEnd(X,Y,Z): - 追加(Y,[X],Z )。

+0

虽然这可能是解决问题的有价值的提示,但 的答案确实需要比这更详细的一点。请 [编辑]解释这将如何解决问题。 或者,请考虑将其写为注释。 –