Exception Can';无法获取异常消息

Exception Can';无法获取异常消息,exception,prolog,Exception,Prolog,我正在使用swi prolog并尝试使用异常处理。我有一个这样的系统 writeAndFail(message) :- write(message) , fail. pred(arg1, arg2) :- catch( real_pred(arg1, arg2), Exception, writeAndFail(Exception) ). 在real\u pred的主体中,我直接抛出一个字符串,例如throw(

我正在使用swi prolog并尝试使用异常处理。我有一个这样的系统

writeAndFail(message)
    :- write(message)
    , fail.

pred(arg1, arg2)
    :- catch(
        real_pred(arg1, arg2), 
        Exception,
        writeAndFail(Exception)
    ).

real\u pred
的主体中,我直接抛出一个字符串,例如
throw('message')
。对pred的调用(在合适的测试用例上)抛出异常并正确捕获它,但消息永远不会被写出。如何更改此代码以打印异常消息?

您使用的是小写术语,看起来您需要变量

谓词
writeAndFail
中的atom
消息
是,并且将始终是文字atom
消息
。它将不会与文字atom
消息
以外的任何内容统一
调用
writeAndFail(hello)
将立即失败,因为没有匹配的谓词。
pred
中的
arg1
arg2
也是如此

如果使用文字参数调用
pred
arg1
arg2
并且如果throw真的抛出文字
“message”
,那么这些值应该统一起来,您应该会看到预期的结果


否则,用大写字母开始变量。

您知道catch谓词吗(我认为它是SWI Specfic)?它在出错时调用第一个参数(第二个参数可以捕获特定的错误),它调用第三个参数,因此我认为没有问题,但在
writeAndFail
中,您是对的。