2012-03-06 94 views
1

我想追加到一個變量,N,這是綁定到一個數字的列表。序言追加變量列表

N = 1. 

append([N], [2,3,4], Z). 

Z = [N,2,3,4]. //Wrong output! 

我想Z = [1,2,3,4]

如何追加一個變量,而不是實際的變量本身的數量一部分?

回答

4

恐怕Prolog沒有像你習慣的變量賦值,只是變量綁定。因此, 「聲明」

N = 1. 
append([N], [2,3,4], Z). 

實際上構成兩個完全不相關的查詢。幸運的是,你想要的效果可以通過結合你的查詢來實現:

N = 1, append([N], [2,3,4], Z). 

如果你真的需要一個全局變量,你總是可以使用一個事實或asserta/1動態定義之一。

另請注意:未來,您可能需要確保在處理數字時使用is而不是=

+1

魔鬼的細節。 「」 vs「,」所有的區別。 – CyberShot 2012-03-06 04:09:41

+0

@ daniel-lyons:使用'is'慢於'=',因爲右邊被評估,即使它只是一個簡單的數字。顯然,這可能取決於特定的Prolog系統,效果很小,但對於原始速度,使用統一。 – twinterer 2012-03-06 12:22:56

+0

@twinterer我對'is'的評論與那些輸入'N = 1 + Y'的初學者通常希望添加發生的事實有關。 :) – 2012-03-06 16:23:06

2

您正在使用哪個Prolog?我知道的所有序言,將首先產生一個N = 1的答案。這應該清楚地表明,Prolog首先回答了詢問N = 1N = 1,這可能起初看起來有點奇怪。例如,這裏是GNU:

| ?- N = 1. 

N = 1 

yes 
| ?- 
append([N], [2,3,4], Z). 

Z = [N,2,3,4] 

yes