我试图使用元谓词"= .."来返回一个值.
现在我有两个例子,第一个完美,但我无法弄清楚如何使用第二个例子做类似的事情:
例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""= .."运算符来完成?
您不能用于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)
| 归档时间: |
|
| 查看次数: |
1184 次 |
| 最近记录: |