Prolog 错误捕获

标签 prolog

给定:

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/

相关文章:

PROLOG CLPFD 如何通过约束来表达?

prolog - Prolog中的算术比较

list - Prolog 原子列表

list - Prolog:将列表中的所有原子小写

performance - 建议Prolog处理器利用大页面

list - Erlang 中的映射函数

prolog - 序言中对称关系的传递闭包

prolog - 自反传递闭包的定义

prolog - 避免findall溢出和n分数问题

prolog - 在 Prolog 中(从文件中)读取字符串