抱歉,我很难为我的问题找出一个相关的标题。
我想对以下行为进行建模:我设计了一种“语言”,其中包含封装标准 Scala 类型的表达式。表达式可以是变量或表达式序列。在下文中,A 可以是标准的 Scala 类型(即 Boolean、Int、Double)。我还想实现一种方法来用其他表达式替换表达式(特别是在序列中)。我尝试了一些我无法编译的代码。当我真的不知道该放什么类型时,我加了引号,但这一切可能都很混乱。由于它的递归性质,我对序列的东西有特别的麻烦。
sealed trait Expression[A] {
def replace[B](a: Expression[B], b: Expression[B]): Expression[?]
}
trait Variable[A] extends Expression[A] {
def replace[B](a: Expression[B], b: Expression[B]) =
if (a == this) b else this
}
case class Sequence[A <: Expression[B]](values: Seq[A]) extends Expression[A] {
def replace[B](a: Expression[B], b: Expression[B]) =
if (a == this) b
else Sequence(values.map(_.replace(a, b)))
}
我当然假设序列是非循环的(序列不能包含自身),因为它会触发无限递归。这些用于实现 n 元矩阵。
谢谢你的帮助。