2011-08-23 106 views
0

我正在使用swi-prolog并尝试使用异常处理。我有一个像无法获取异常消息

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

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

系统在real_pred身体我直接扔一个字符串,例如throw('message')。对pred的调用(在合适的测试用例上)引发异常并正确捕获它,但消息永远不会写出来。如何修改此代码以便打印异常消息?

回答

1

您正在使用小写字词,它看起来像你想要的变量。

谓词writeAndFail中的原子message是且始终是文字原子message。它不会与字面原子message以外的任何其他内容相统一。
调用writeAndFail(hello)将立即失败,因为没有匹配的谓词。 arg1,arg2pred中也是如此。

如果调用pred用文字形参,arg1arg2如果真的抛出抛出一个文字'message'然后这些价值观要统一,你应该会看到预期的结果。

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

+0

你是否知道catch谓语(我认为它是SWI-Specfic)?它会调用第一个参数,错误(第二个参数可以捕获特定的错误),它会调用第三个参数,所以我没有看到任何问题,但是在'writeAndFail'中,您是对的。 –

+0

对不起,没有正确阅读,你完全正确 –