scala – 构建嵌套案例类的变体
发布时间:2020-12-16 18:54:36 所属栏目:安全 来源:网络整理
导读:所以我有这样的事情: abstract class Termcase class App(f:Term,x:Term) extends Termcase class Var(s:String) extends Termcase class Amb(a:Term,b:Term) extends Term //ambiguity 一个术语可能如下所示: App(Var(f),Amb(Var(x),Amb(Var(y),Var(z))))
所以我有这样的事情:
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 一个术语可能如下所示: 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中创建这些变体的最佳方法? 解决方法
Scala提供模式匹配来解决这些问题.解决方案看起来像:
def matcher(term: Term): List[Term] = { term match { case Amb(a,b) => matcher(a) ++ matcher(b) case App(a,b) => for { va <- matcher(a); vb <- matcher(b) } yield App(va,vb) case v: Var => List(v) } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |