2012-10-31 49 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

雖然這可能是解決問題的有價值的提示,但 的答案確實需要比這更詳細的一點。請 [編輯]解釋這將如何解決問題。 或者,請考慮將其寫爲註釋。 –