【发布时间】:2020-05-04 20:23:43
【问题描述】:
TL;DR:这个问题是关于 Prolog 实现细节的。继续需要您自担风险。你被警告了:)
根据 ISO/IEC 13211-1995“7.12 错误”:
7.12.2 错误分类
[...]
j) 任何阶段都可能出现系统错误 执行。应有的条件 系统错误,以及处理器之后采取的行动 系统错误取决于实现。它有 形成
system_error。[...]
注意事项
[...]
4 可能会发生系统错误,例如 (a) 在交互中 与操作系统(例如,磁盘崩溃或中断), 或 (b) 当一个目标
throw(T)已经被执行并且有 没有活动目标catch/3。
好的,但有点模糊......所以这是我的实际问题:
system_error的以下用法是否合法?
-
Prolog 系统“L”不提供可修改的字符转换映射。 相反,它的行为如下:
current_char_conversion(X, Y) :- maplist(can_be(character), [X,Y]), false. % mapping unch. char_conversion(X, Y) :- maplist(must_be(character), [X,Y]), ( X == Y -> true % removal is OK ; throw(error(system_error, not_supported(char_conversion/2))) ). -
Prolog 系统“K”支持访问控制列表,用于在执行的某些部分禁止使用某些谓词。每当在代码的受限部分调用这样的谓词时,就会发生这种情况:
throw(error(system_error, disallowed(P/N)))
Prolog 系统“L”和“K”还能被称为“符合 ISO 标准”吗?
【问题讨论】:
标签: prolog api-design iso-prolog