假设:
fruitid('Apple', 'Granny Smith', 1).
fruitid('Pear', 'Bartlett', 2).
如果我有条款
type_of_fruit(ID):-
fruitid(Fruit, _, ID), write(Fruit).
如何实现捕获错误输入的方法?
例如
fruitid(5).
感谢。
AS
答案 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.