2014-12-08 87 views
1

我試圖實現一個程序,該變量具有多個值並評估所有值。例如:序言:具有多個值的變量

foo(X,R) :- 
    X > 2, 
    Z is R + 1, 
    R = Z. 

該程序可能不是有效的,但它會幫助我問問題無論如何。

我的問題:如果X有多個值,我將如何增加計數器的每個值X > 2

回答

1

爲了實例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程序爲XR所有實例失敗。該例如意味着,下面的查詢將不會終止:

?- between(0, inf, X), foo(X, 1). 

另一方面,該程序可以在圖書館CLP(FD)(由馬庫斯Triska創建)被改寫:

:- use_module(library(clpfd)). 

foo(X,R):- 
    X #> 2, 
    Z #= R + 1, 
    R #= Z. 
+0

謝謝你的建議。我的問題更集中於如果我有一個具有多個值的變量,序言會評估每個值併爲每個值增加計數器,其中X> 2? – user2962883 2014-12-08 08:52:45

+0

@ user2962883啊,我明白了。我在我的答案中增加了一個替代解決方案,它顯示了CLP(FD)中的相同程序,您可以在其中表示變量屬於某個範圍(例如,'X#> 2'表示'X' [2,+ INF)')。 – 2014-12-08 09:02:37