Prolog 使用;大学"E;=&引用;返回函数布尔结果的元谓词?

Prolog 使用;大学"E;=&引用;返回函数布尔结果的元谓词?,prolog,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. 这产生了一个错误, 我希望值为yes或true或1

我试图使用一个元谓词“=…”来返回一个值

下面我有两个例子,第一个有效 很好,但是,我无法使用第二个示例了解如何执行类似操作:

例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.
这产生了一个错误, 我希望值为yes或true或1, 这样我就可以在IF语句中使用它了


如何使用“univ”“=…”运算符实现这一点?

您不能使用
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
)