我完成了以下任务:
让我们输入Strat = Term - > [Term]是减少策略的类型。 实施策略root :: Strat,它应用单个β步骤 根(如果可能的话)
现在我知道不同的策略(适用订单减少,正常订单减少......)是如何工作的。
我现在的问题是,现在:每当我将一个β步骤应用于一个术语时,我会得到另一个术语。我为什么要退回条款清单?
我到现在所拥有的是:
type Id = String
data Term = Var Id -- Var ... variable
| App Term Term -- App ... application
| Abs Id Term -- Abs ... abstraction
deriving(Show)
root :: Term -> Term
root (Var v) = Var v -- var
root (Abs x s) = Abs x s -- abs
root (App (Abs x t) u) = subst x u t -- root
root (App s u) = App (root s) (root u) -- app-l and app-r
-- where subst x s t computes t[x := s], satisfying the freshness constraint.
subst :: String -> Term -> Term -> Term
...(already implemented)
修改 也许我应该提到必须要做的接下来的两个步骤,以使问题清楚:
实施策略组合器嵌套:: Strat - > Strat,给出了一个 策略s,导致一种尝试应用s的新策略 非根位。
在以前的功能基础上,通过名称缩减cbn :: Strat实现单步调用。