Prolog错误捕获

时间:2010-03-07 12:16:10

标签: prolog

假设:

fruitid('Apple', 'Granny Smith', 1).
fruitid('Pear', 'Bartlett', 2).

如果我有条款

type_of_fruit(ID):-
       fruitid(Fruit, _, ID), write(Fruit).

如何实现捕获错误输入的方法?

例如

fruitid(5).

感谢。

AS

1 个答案:

答案 0 :(得分:4)

设置Prolog标志并使用Catch / 3

假设SWI Prolog

1)prolog_flags可以改变错误行为。 首先允许系统捕获错误并报告。 unknown标志用于未知谓词,例如fruitID/1

set_prolog_flag(report_error,true).
set_prolog_flag(unknown,error). 

现在,当使用错误的谓词arity时,应该出现如下错误消息:

?- fruitid(5).
ERROR: toplevel: Undefined procedure: fruitid/1 (DWIM could not correct goal)

2)在代码中捕获此类异常, 将目标包含在catch / 3谓词中。 来自1)的settigs是必需的。 这是在代码中捕获未定义谓词的方法, 或者为此事件捕获任何异常。 将format / 3替换为所需的处理程序:

while_running_some_program:-
    catch(foodid(5), 
        error(Err,_Context),
        format('You done goofed! ~w\n', [Err])),
    rest_of_code.
相关问题