1
我試圖實現一個程序,該變量具有多個值並評估所有值。例如:序言:具有多個值的變量
foo(X,R) :-
X > 2,
Z is R + 1,
R = Z.
該程序可能不是有效的,但它會幫助我問問題無論如何。
我的問題:如果X
有多個值,我將如何增加計數器的每個值X > 2
?
我試圖實現一個程序,該變量具有多個值並評估所有值。例如:序言:具有多個值的變量
foo(X,R) :-
X > 2,
Z is R + 1,
R = Z.
該程序可能不是有效的,但它會幫助我問問題無論如何。
我的問題:如果X
有多個值,我將如何增加計數器的每個值X > 2
?
爲了實例X
到越來越大的整數,則可以使用以下命令:
?- between(0, inf, X).
X = 0 ;
X = 1 ;
X = 2 ;
X = 3 ;
X = 4 ;
<ETC.>
PS1:請注意,您必須實例R
以及因爲它在算術表達式Z is R + 1
使用。
PS2:注意,由於R =\= R + 1
爲有限R
程序爲X
和R
所有實例失敗。該例如意味着,下面的查詢將不會終止:
?- between(0, inf, X), foo(X, 1).
另一方面,該程序可以在圖書館CLP(FD)(由馬庫斯Triska創建)被改寫:
:- use_module(library(clpfd)).
foo(X,R):-
X #> 2,
Z #= R + 1,
R #= Z.
謝謝你的建議。我的問題更集中於如果我有一個具有多個值的變量,序言會評估每個值併爲每個值增加計數器,其中X> 2? – user2962883 2014-12-08 08:52:45
@ user2962883啊,我明白了。我在我的答案中增加了一個替代解決方案,它顯示了CLP(FD)中的相同程序,您可以在其中表示變量屬於某個範圍(例如,'X#> 2'表示'X' [2,+ INF)')。 – 2014-12-08 09:02:37