Prolog DSL中多重定义的ISO错误分类

时间:2016-11-13 20:20:44

标签: prolog iso-prolog

我正在构建一个使用必须唯一的程序名称的DSL(本质上)。

目前还不清楚用什么类型的错误术语来表示第二个定义。

存在_错误有点适合,但我对此感到不舒服。它似乎意味着缺少定义,而不是多重定义。

permission_error(修改,程序,名称/ Arity)似乎很有希望,但似乎暗示“有些人可以做到这一点,但不是你”。如果没有进一步的启示,我会用它。

syntax_error sorta有点适合,但被定义为仅适用于read_term。

我应该在这里定义自己的吗?规范说“你可以使用这些”。

1 个答案:

答案 0 :(得分:1)

在过去,没有SWISH或Pengines,多个用户使用Prolog处理器,并且可能通过批处理,没有太多意识到资源可能被其他用户阻止。所以错误术语permission_error / 3的解释最像是SICStus Prolog在这里描述的:

  

“尝试操作时发生权限错误   在系统通常能够运行的各种操作中   表演,以及你一般允许的种类   请求,但这个特定时间是不允许的。“
  http://sicstus.sics.se/sicstus/docs/4.0.4/html/sicstus/ref_002dere_002derr_002dper.html

但我同意,从错误术语的名称来看,我们希望它的应用程序范围只会违反访问或修改规则,而不会对语法结构(如DSL)产生一些语义限制。

但你可能不是唯一有这些问题的人。如果您的Prolog系统有一个消息传递子系统,您可以轻松地将错误术语与用户友好的文本相关联,我认为没有任何理由不引入新的错误术语。

您可以采用SICStus Prolog已经建议的以下错误术语,但未在ISO核心标准中找到:

  

“当两个其他有效值或时,会发生一致性错误   指定的操作彼此不一致。“   http://sicstus.sics.se/sicstus/docs/4.0.4/html/sicstus/ref_002dere_002derr_002dcns.html

     

“当目标或声明出现错误时,会发生上下文错误   地点。目标可能有也可能没有任何问题   声明;重点是它不合适。“   http://sicstus.sics.se/sicstus/docs/4.0.4/html/sicstus/ref_002dere_002derr_002dcon.html

特别是SWI-Prolog有这样一个消息传递子系统,SWI-Prolog长期以来告诉与其他Prolog系统的互操作性。因此,如果您使用SWI-Prologs消息传递的唯一危险是某种锁定,这可能不会打扰您。