小编Jim*_*ler的帖子

Haskell:元组的递归定义

在其中,我尝试创建Krivine抽象机。我需要构建的数据类型之一是环境。这样构建环境:

我们有x,一个“ Var”(这只是字符串的同义词)我们有N,一个“ Term”(这是一个Lambda项)

因此,环境E的定义为:

E =(x,N,E)·E.

因此,环境就是元组列表。每个元组包含一个Var(字符串),一个Term和一个环境列表(可能为空)。

我正在定义“ Env”,如下所示:

data Env = Env (Var, Term, [Env])
Run Code Online (Sandbox Code Playgroud)

在我看来,这似乎应该起作用。但是,当我尝试使用Env时,我得到:

*Main> ("y", Lambda "z" (Variable "z"), []) :: Env

<interactive>:166:1: error:
* Couldn't match expected type `Env'
              with actual type `([Char], Term, [a0])'
* In the expression: ("y", Lambda "z" (Variable "z"), []) :: Env
  In an equation for `it':
      it = ("y", Lambda "z" (Variable "z"), []) :: Env
Run Code Online (Sandbox Code Playgroud)

“ y”肯定是[Char]

Lambda“ z”(变量“ z”)绝对是Term类型的

空列表绝对是列表!

我觉得问题可能出在空列表上,但绝对不可缺少的是环境中可以存在一个空列表(这是基本情况)。

我现在一直在努力工作几个小时,一点也​​不运气。任何帮助是极大的赞赏。

recursion haskell lambda-calculus

0
推荐指数
1
解决办法
133
查看次数

标签 统计

haskell ×1

lambda-calculus ×1

recursion ×1