使用“Univ”/“= ..”元谓词来返回函数的布尔结果?

时间:2011-06-28 12:37:39

标签: prolog

我正在尝试使用元谓词“= ..”来返回值。

现在我有两个例子,第一个有效 完美,但我无法弄清楚如何使用第二个例子做类似的事情:

示例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”“= ..”运算符实现这一目标?

1 个答案:

答案 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
)