我正在尝试使用元谓词“= ..”来返回值。
现在我有两个例子,第一个有效 完美,但我无法弄清楚如何使用第二个例子做类似的事情:
示例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”“= ..”运算符实现这一目标?
答案 0 :(得分: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
)