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

Kom*_*980 3 prolog

我试图使用元谓词"= .."来返回一个值.

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

例1:

?- Expression=..[+,2,3], Value is Expression.
Expression = 2 + 3
Value = 5
yes
Run Code Online (Sandbox Code Playgroud)

例2:

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

?- Term=..[test,-5], Value is Term.
Run Code Online (Sandbox Code Playgroud)

这产生了一个错误,我希望Value为yes或true或1,这样我就可以在IF语句中使用它.

如何使用"univ""= .."运算符来完成?

Fre*_*Foo 5

您不能用于is/2获取谓词调用的布尔值.call/1改为使用:

?- Term =.. [test, -5], call(Term).
false.
?- Term =.. [test, 5], call(Term).
Term = test(5).
Run Code Online (Sandbox Code Playgroud)

要不就:

?- call(test, 5).
true.

?- call(test, -5).
false.
Run Code Online (Sandbox Code Playgroud)

然后你的if-then-else就变成了:

(Term =.. [test, -5], call(Term) ->
    % then-part
;
    % else-part
)
Run Code Online (Sandbox Code Playgroud)

如果由于某些其他原因需要重新验证结果值,通常的建议适用:

(Term =.. [test, -5], call(Term) ->
    Value = true   % or 1
;
    Value = false  % or 0, or fail
)
Run Code Online (Sandbox Code Playgroud)