如何在根部应用单个β步骤

时间:2017-11-22 11:40:59

标签: haskell lambda

我完成了以下任务:

  

让我们输入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实现单步调用。

0 个答案:

没有答案