" =>"在这种情况下,运算符在scala中工作?

时间:2016-07-07 18:14:33

标签: scala

我目前正在为我试图完成的课程做作业。

在作业中定义了类似的内容:

type Spec = Term=> Term

在这种情况下," Term"是一块程序代码。

现在我理解这意味着我有一个规则,其中一个术语暗示另一个术语,或解析它。抱歉我的措词不好,英语不是我的第一语言。

def svc(ctxt: Env)(pre: Spec, s: Stmt): List[Term] = s match {
  case CompStmt(stmts: List[Stmt]) => stmts match {
    case Nil => Nil
    case x::xs => svc(ctxt)(pre, x) ++ svc(ctxt)(asp(ctxt)(pre, x), CompStmt(xs))
  }
  case CondStmt(cond: Expr, ifBranch: Stmt, elseBranch: Stmt) => 
    svc(ctxt)({st: Term=> And(Logic.sem(ctxt, st, cond), pre(st))}, ifBranch) ++
    svc(ctxt)({st: Term=> And(Not(Logic.sem(ctxt, st, cond)), pre(st))}, elseBranch)
  case AssignStmt(lhs: Expr, rhs: Expr) => ??? 
  case SpecStmt(sp) => List(Implies(Logic.sem(ctxt, pre, sp), pre))
}

我想知道最后一个案例," SpecStmt"。方法" Logic.sem"定义如下:

def sem(ctxt: Env, s: Term, e: Expr): Term

所以我的pre类型为Spec,例如Term => Term。我知道想要从pre转到单Term,我可以将其传递给Logic.sem - 方法。

我知道我在这里错过了一个基本概念,所以可以请某人指出我正确的方向吗?

提前致谢!

0 个答案:

没有答案