我正在构建一个使用必须唯一的程序名称的DSL(本质上)。
目前还不清楚用什么类型的错误术语来表示第二个定义。
存在_错误有点适合,但我对此感到不舒服。它似乎意味着缺少定义,而不是多重定义。
permission_error(修改,程序,名称/ Arity)似乎很有希望,但似乎暗示“有些人可以做到这一点,但不是你”。如果没有进一步的启示,我会用它。
syntax_error sorta有点适合,但被定义为仅适用于read_term。
我应该在这里定义自己的吗?规范说“你可以使用这些”。
答案 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消息传递的唯一危险是某种锁定,这可能不会打扰您。