我有一个无类型的Lambda微积分 - 上下文评估解释器作为家庭作业,我需要帮助!我不知道如何使用函数式语言! 解释器应提供一个评估函数,例如interpret,它接收输入文件的名称并返回一个字符串列表,表示评估后获得的闭包,包括它们的相关上下文
以下是输入:
true=\x.\y.x
false=\x.\y.y
not=\x.((x false) true)
(not true)
(not false)
and=\x.\y.((x y) false)
((and true) true)
((and true) false)
((and false) true)
((and false) false)
or=\x.\y.((x true) y)
((or true) true)
((or true) false)
((or false) true)
((or false) false)
nil=\x.true
null=\l.(l \x.\y.false)
cons=\x.\y.\z.((z x) y)
car=\l.(l true)
cdr=\l.(l false)
if=\p.\then.\else.((p then) else)
fix=\f.(\x.(f (x x)) \x.(f (x x)))
(fix fun)
append=\a.\b.((fix \r.\a.(((if (null a)) b)
((cons (car a)) (r (cdr a))))) a)
la=((cons x) nil)
lb=((cons y) ((cons z) nil))
lc=((append la) lb)
(car lc)
(car (cdr lc))
(car (cdr (cdr lc)))
,这是输出:
<\x.\y.x; >
<\x.\y.y; >
<\x.((x false) true); >
<\x.\y.y; x<-true>
<\x.\y.x; x<-false>
<\x.\y.((x y) false); >
<\x.\y.x; >
<\x.\y.y; >
<\x.\y.y; y<-true, x<-false>
<\x.\y.y; y<-false, x<-false>
<\x.\y.((x true) y); >
<\x.\y.x; y<-true, x<-true>
<\x.\y.x; y<-false, x<-true>
<\x.\y.x; >
<\x.\y.y; >
<\x.true; >
<\l.(l \x.\y.false); >
<\x.\y.\z.((z x) y); >
<\l.(l true); >
<\l.(l false); >
<\p.\then.\else.((p then) else); >
<\f.(\x.(f (x x)) \x.(f (x x))); >
(fun (x x))
<\a.\b.((fix \r.\a.(((if (null a)) b)
((cons (car a)) (r (cdr a))))) a); >
<\z.((z x) y); y<-nil, x<-x>
<\z.((z x) y); y<-((cons z) nil), x<-y>
<\z.((z x) y); y<-(r (cdr a)), x<-(car a), a<-a, r<-(x x), b<-lb, a<-la>
x
y
z
我需要帮助! 某处有模特吗?或者至少类似的东西呢?我该如何开始?有人做了类似的东西,可以帮助我吗? 谢谢!
答案 0 :(得分:1)
我认为这不是一个问题。
以下是我将采取的立场。
对于第一次任务而言,这似乎都是很多工作,如果是的话,我表示哀悼。我曾经有过一位讲师,他在“C和编译器入门”课程中的第一个任务就是用C语言编写一个C编译器,在我看来,这是一个比教学法更多的睾丸激素。