给定:
fruitid('Apple', 'Granny Smith', 1).
fruitid('Pear', 'Bartlett', 2).
如果我有这个条款
type_of_fruit(ID):-
fruitid(Fruit, _, ID), write(Fruit).
我怎样才能实现捕获错误输入的方法?
例如
fruitid(5).
谢谢。
作为
最佳答案
设置 Prolog 标志并使用 Catch/3
假设 SWI Prolog
1) prolog_flags 可以改变错误行为。
首先让系统捕获错误并报告它。 unknown
标志用于未知谓词,例如 fruitID/1
。
set_prolog_flag(report_error,true).
set_prolog_flag(unknown,error).
现在当使用了错误的谓词元数时,应该会出现这样的错误信息:
?- fruitid(5).
ERROR: toplevel: Undefined procedure: fruitid/1 (DWIM could not correct goal)
2) 在代码中捕获这样的异常, 将目标包装在 catch/3 谓词中。 来自 1) 的设置仍然是必需的。 这是在代码中捕获未定义谓词的方法, 或为此捕获任何异常。 将 format/3 替换为所需的处理程序:
while_running_some_program:-
catch(foodid(5),
error(Err,_Context),
format('You done goofed! ~w\n', [Err])),
rest_of_code.
关于Prolog 错误捕获,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2396187/