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 的最大递归深度限制。
* 重写求值器以后忘了写处理符号的部分了。因为符号的类型已经写好了所以很好弄。
其实我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 的最大递归深度限制。
* 重写求值器以后忘了写处理符号的部分了。因为符号的类型已经写好了所以很好弄。

