这是berkeley的CS61A课程上的一个Project,写一个Scheme语言的一个解释器!
当然,这只是scheme语言的一个子集。我大概花了一天的时间读懂了代码,花了两天时间补充代码和测试代码,说实话,这个Project并不难。
需要注意的是,里面要求你写scheme函数的作业我并没有做,我只负责写解释器,不负责写代码,所以我将sheme_grade.py
中关于要求学生写的测试代码的那段删除了,其余的十几个测试用例全部通过了,所以,不出意外的话,这个解释器已经达到了要求。
我还要说的一点,是关于尾递归优化的,当然,我的代码是实现了尾递归优化的,实现了优化的代码和之前没有实现优化的代码出入还是挺大的。
Python的递归调用是有限制的,一般栈里面堆积了1000
多个函数之后就会报异常的,所以这里的尾递归优化思想十分简单,那就是尽量消除递归,总之递归的代码可以用循环嘛,递归虽然写起来非常优雅,但是挺耗内存的。
加上这个解释器,这学期林林总总,我居然也写了4-5
个解释器了,挺有意思的。