https://github.com/tioover/schepy/tree/master其实我Scheme 不怎么会,SICP 才正在看第二章,不过有一天心血来潮想要写一个解释器,于是照着[一个知乎上的回答](
http://www.zhihu.com/question/20115358/answer/15350593 )开始写了。写完了要测试,连运行多条表达式都不会,然后才找到begin 给解释器加上。几秒前我才发现这篇文章(
http://www.googies.info/articles/lispy.html )
本来是很简单的东西,但是我水平挺臭写了四天,不包括测试用例一共四百多行。原本以为最难的部分是函数,像作用域啊,递归啊什么的,但是没想到(或者说果然),在求值器删删改改了以后,函数这一块反而一两个小时就弄好了。
## 已知问题
有些打算慢慢在这几天解决,有些打算边学边在今明年解决,有些可能永远也不会解决了(Python 最大递归深度……)。
* 我连标准都还没看过。
* 仅仅是个玩具,大量功能缺失:向量、尾递归优化、符号、eval、元编程。
* 很多语法糖不能使用,而且只能严格按照S-表达式,比如说只能用 (cons x y) 定义序对,(define foobar (lambda ...)) 定义函数。
* 参数只能用列表的形式:(lambda (a b c) ...)
* 错误信息不完善,有些地方还忘了写异常(这里记一下:函数的参数个数。)
* 如果在上下文中找不到,那就会直接在Python 中eval,可以弄出各种诡异的东西,需要用正则表达式判断类型再eval。
* 为了获取链表的长度(len(li)),会多一次对链表的遍历。
* Python 的最大递归深度限制。
* 重写求值器以后忘了写处理符号的部分了。因为符号的类型已经写好了所以很好弄。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
https://www.v2ex.com/t/80908
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.