我正在使用swi-prolog并尝试使用异常处理。我有一个像
这样的系统writeAndFail(message)
:- write(message)
, fail.
pred(arg1, arg2)
:- catch(
real_pred(arg1, arg2),
Exception,
writeAndFail(Exception)
).
在real_pred
的正文中,我直接抛出一个字符串,例如throw('message')
。对pred(对一个合适的测试用例)的调用抛出异常并正确捕获它,但是消息永远不会被写出来。如何更改此代码以便打印异常消息?
答案 0 :(得分:1)
您正在使用小写字词,看起来您想要变量。
谓词message
中的原子writeAndFail
是,并且将始终是文字原子message
。除了文字原子message
之外,它不会与其他任何东西统一
调用writeAndFail(hello)
将立即失败,因为没有匹配的谓词。
对于arg1
中的arg2
,pred
也是如此。
如果您使用文字参数调用pred
arg1
和arg2
,并且如果throw真的抛出文字'message'
那么这些值应该统一,您应该看到预期结果。
否则,用大写字母开始变量。