微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么导出固定声明是一个“坏主意”?

如何解决为什么导出固定声明是一个“坏主意”?

根据 David MacQueen 在他的对标准机器学习的反思报告1

词法范围的中缀指令是 Pop-2 的一个不明智的遗产。它们使解析变得复杂,并且它们不能很好地与模块系统配合使用,因为中缀指令不能通过结构导出或在签名中指定添加这样的功能不是一个好主意)。。 >

现在我同意他的说法,即 infix[r] 声明的私有范围是一个坏主意,它使导入的用户定义的运算符变得毫无用处,但我为此设想的解决方案是实际导出签名中的那些声明......不要完全摆脱它们。
在我所知道的具有固定性声明的语言(ML 和派生类、Haskell 和派生类、Prolog 等)中,我对它们是否记录了该想法的优点和/或缺点很感兴趣。更一般地说,语言实现者的既定设计经验可以为看起来(从用户角度)一个不错的便利功能的缺点带来有趣的见解。

所以我的问题是,简而言之,是否有引用和/或文献中的已知问题支持 MacQueen 关于不输出固定性的观点?

解决方法

一种可能性是,如果您看到类似 x op1 y op2 z 的内容,您不知道它的意思是 op1(x,op2(y,z)) 还是 op2(op1(x,y),z)。 Prolog 有 write_canonical,它以纯前缀形式写入,因此您始终可以准确地知道某些内容是如何被解析的。

还有从模块 (SWI-Prolog seems to have got this right) 导出运算符声明的问题。

除此之外,我想不出任何缺点。在可读性和一致性方面有巨大的优势。例如,variant of DCGs 定义了一个运算符 -->>,与现有的 --> 类似……这使得事情比必须使用前缀表示法编写的所有内容更具可读性。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。