2011-06-28 14 views
3

私はメタ述語 "= .."を使用して値を返そうとしています。"Univ"/"= .."メタ述語を使用して関数のブール結果を返すか?

最初のものは完全に の作品今、私は以下の2つの例を持っている、しかし、私は2番目の例を使用して、同様の何かをする方法を見つけ出すことはできません。

例1:

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

例2:

これは、エラーを生成 と私は値がyesまたはtrueまたは1になりたい、さ
?- test(N):-N>=0. 
Term asserted 

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

0を使用して、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

関連する問題