230
社区成员




slides 中提到我们可以用 beta-reduction 一直对 lambda 式子进行化简,但目前的 interpreter 应该不会针对 Fn(_, body) 的场景下的 body 内部继续进行 substitution,是不是这个 eval 只是针对一次 App 的结果求值,如果要完成最终的化简要怎么做呢,或者说基于此 interpreter 继续完善 Fn(_, body) 是不是就行。
已看过博主的文章,很不错的内容,干货满满,期望师傅能输出更多干货,并强烈为师傅分享自己的知识点赞
另外,如果可以的话,期待师傅能给正在参加年度博客之星评选的我一个五星好评,您的五星好评都是对我的支持与鼓励:https://bbs.csdn.net/topics/611387568
点赞五星好评回馈小福利:抽奖赠书 | 总价值200元,书由君自行挑选(从此页面参与抽奖的同学,只需五星好评后,参与抽奖)
省事的话可以这样:对于Fn(_, body)
,在body
上递归调用eval
,然后将返回结果包在新的Fn
里返回。
但是这种方法可能会导致程序提前陷入死循环,所以完善的做法是使用另外一个专门的函数bind
,只对body
进行变量绑定,不进一步求值。
可以看我们之前的讨论:https://bbs.csdn.net/topics/609352619%E3%80%82
内部要继续eval,
Fn(_, eval(body)),
不然开发好的解释器运行ppt中例子会跟纸上推演不一致。
可以用ppt的示例来做测试用例。跑通符合预期,说明开发好的解释器比较健壮。