我目前正在为我试图完成的课程做作业。
在作业中定义了类似的内容:
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
- 方法。
我知道我在这里错过了一个基本概念,所以可以请某人指出我正确的方向吗?
提前致谢!