【问题标题】:What are legitimate / proper System Errors in ISO-Prolog?ISO-Prolog 中的合法/正确系统错误是什么?
【发布时间】: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 的以下用法是否合法?

  1. 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)))
       ).
    
  2. Prolog 系统“K”支持访问控制列表,用于在执行的某些部分禁止使用某些谓词。每当在代码的受限部分调用这样的谓词时,就会发生这种情况:

    throw(error(system_error, disallowed(P/N)))
    

Prolog 系统“L”和“K”还能被称为“符合 ISO 标准”吗?

【问题讨论】:

    标签: prolog api-design iso-prolog


    【解决方案1】:

    不是您关于合规性问题的答案,但是...

    throw(error(system_error, disallowed(P/N)))

    权限错误在这里更有意义。但是标准中操作和权限类型的可能值并不理想。 也许扩展它们并使用类似的东西,例如

    permission_error(call, predicate, P/N)

    resource_error/1 在这里也不会牵强。

    【讨论】:

    • 权限错误通常意味着有时允许此操作。
    猜你喜欢
    • 1970-01-01
    • 2011-08-30
    • 2012-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多