加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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)
  }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读