2011-06-28 40 views
3

我正在嘗試使用元謂語「= ..」來返回一個值。使用「Univ」/「= ..」元謂語返回函數的布爾結果嗎?

現在我有下面兩個例子中,第一個工程 完美,但我不知道如何做類似使用第二示例的東西:

實施例1:

?- Expression=..[+,2,3], Value is Expression. 
Expression = 2 + 3 
Value = 5 
yes 

實施例2:

?- test(N):-N>=0. 
Term asserted 

?- Term=..[test,-5], Value is Term. 

這是產生誤差, ,我想值是肯定的或真或1, 以便我可以在IF語句中使用它。

這怎麼能用「univ」「= ..」操作符來實現呢?

回答

5

您不能使用is/2來獲取謂詞調用的布爾值。使用call/1代替:

?- Term =.. [test, -5], call(Term). 
false. 
?- Term =.. [test, 5], call(Term). 
Term = test(5). 

或者只是:

?- call(test, 5). 
true. 

?- call(test, -5). 
false. 

那麼你的if-then-else的只是變成:

(Term =.. [test, -5], call(Term) -> 
    % then-part 
; 
    % else-part 
) 

如果你想具體化一些其他原因的結果值,通常的建議適用:

(Term =.. [test, -5], call(Term) -> 
    Value = true % or 1 
; 
    Value = false % or 0, or fail 
) 
+0

太棒了!謝謝, – Kommando1980