gpt4 book ai didi

Scala - 前缀一元运算符

转载 作者:行者123 更新时间:2023-12-04 02:31:05 28 4
gpt4 key购买 nike

我最近给了 Scala 第二次机会,并从我一直实现的项目开始(使用函数式或伪函数式语言):命题逻辑(以及后来的谓词逻辑)的自动推理器。

现在,我试图在语言本身中获得尽可能漂亮的命题逻辑符号,并且我已经做到了这一点 - 使用隐式转换(字符串 - > Atom):

("A" and "B") implies "C"

函数“and”和“implies”(以及“or”和“equivalent”)是调用相关案例类构造函数的简单方法。但是,在实现“not”时,我会遇到以下两种符号中的任何一种:
("A" and "B").not
Not("A" and "B")

有没有办法诱使 Scala 接受所需的内容:
not("A" and "B")

最好不要将类“Not”重命名为“not”,因为我可能会在 future 称其为“¬”或其他名称。

最佳答案

截至 2014 年 2 月,我认为定义前缀的最简洁方法是 not对表达式的操作,同时避免各种额外的 cruft/wrapping,将直接在包范围内声明函数,连同所有其他函数、类、类型等:这是通过定义一个包对象来完成的(Scala 没有) t 允许您只将函数放在 .scala 文件的根级别(我很想知道为什么 - 只是跟随 Java 的脚步?))。

package org.my.logiclib

implicit class Atom(s: String) { ... }
class MyType1
class MyType2

object `package` {
def not(expr: Expr) = ...
}

这样,做 import org.my.logiclib._将导入所有内容,包括 not() .

上面是一样的
package org.my

package logiclib {
implicit class Atom ...
...

def not(expr: Expr) = ...
}

关于Scala - 前缀一元运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3651404/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com