我想追加到一個變量,N,這是綁定到一個數字的列表。序言追加變量列表
N = 1.
append([N], [2,3,4], Z).
Z = [N,2,3,4]. //Wrong output!
我想Z = [1,2,3,4]
如何追加一個變量,而不是實際的變量本身的數量一部分?
我想追加到一個變量,N,這是綁定到一個數字的列表。序言追加變量列表
N = 1.
append([N], [2,3,4], Z).
Z = [N,2,3,4]. //Wrong output!
我想Z = [1,2,3,4]
如何追加一個變量,而不是實際的變量本身的數量一部分?
恐怕Prolog沒有像你習慣的變量賦值,只是變量綁定。因此, 「聲明」
N = 1.
append([N], [2,3,4], Z).
實際上構成兩個完全不相關的查詢。幸運的是,你想要的效果可以通過結合你的查詢來實現:
N = 1, append([N], [2,3,4], Z).
如果你真的需要一個全局變量,你總是可以使用一個事實或asserta/1
動態定義之一。
另請注意:未來,您可能需要確保在處理數字時使用is
而不是=
。
您正在使用哪個Prolog?我知道的所有序言,將首先產生一個N = 1
的答案。這應該清楚地表明,Prolog首先回答了詢問N = 1
和N = 1
,這可能起初看起來有點奇怪。例如,這裏是GNU:
| ?- N = 1.
N = 1
yes
| ?-
append([N], [2,3,4], Z).
Z = [N,2,3,4]
yes
魔鬼的細節。 「」 vs「,」所有的區別。 – CyberShot 2012-03-06 04:09:41
@ daniel-lyons:使用'is'慢於'=',因爲右邊被評估,即使它只是一個簡單的數字。顯然,這可能取決於特定的Prolog系統,效果很小,但對於原始速度,使用統一。 – twinterer 2012-03-06 12:22:56
@twinterer我對'is'的評論與那些輸入'N = 1 + Y'的初學者通常希望添加發生的事實有關。 :) – 2012-03-06 16:23:06