在其中,我尝试创建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类型的
空列表绝对是列表!
我觉得问题可能出在空列表上,但绝对不可缺少的是环境中可以存在一个空列表(这是基本情况)。
我现在一直在努力工作几个小时,一点也不运气。任何帮助是极大的赞赏。