所以我得到了这样的东西:
abstract class Term
case class App(f:Term,x:Term) extends Term
case class Var(s:String) extends Term
case class Amb(a:Term, b:Term) extends Term //ambiguity
一个 Term 可能如下所示:
App(Var(f),Amb(Var(x),Amb(Var(y),Var(z))))
所以我需要的是 Amb 类指示的所有变体。这用于表示一个模棱两可的解析森林,我想键入检查每个可能的变体并选择正确的变体。在这个例子中,我需要:
App(Var(f),Var(x))
App(Var(f),Var(y))
App(Var(f),Var(z))
在 scala 中创建这些变化的最佳方法是什么?效率会很好,但并不是真正的要求。如果可能的话,我喜欢避免使用反射。