1
felix021 2013-09-01 02:13:09 +08:00
赞。。我就是为了解释器去看SICP的,现在看到3.3.5了,好艰辛……
|
2
cxe2v 2013-09-01 09:27:12 +08:00
牛逼,都能写解释器了就不能叫新手了,绝对是老手
|
3
tioover OP 昨天今天解决了一些问题:
* define 惰性求值。 * 符号,eval,判断类型 * 一些错误提示 * 之前字符串里面如果有空格会出错,现在修复了,不过词法分析器现在用了一些正则表达式。 * 一些语法糖,可以直接用define 来定义函数了,不需要define lambda。也可以用(a . b) 定义序对了。 |
4
JackLinMaker 2013-09-02 10:04:00 +08:00
改天我写个ruby的:)
|
5
yuelang85 2013-09-02 10:05:19 +08:00
cool
|
6
gadmyth 2013-09-02 13:06:48 +08:00
Lisp还支持变量为unicode的,不知楼主是否支持
|
7
tioover OP 搞错define 的语法了,还以为函数定义函数名要单独写一个原子(define foobar (x) ()),结果不用,已经修复了。还有对于define 要惰性求值也是因此而起的误解(SICP 习题1.5)
今天开了个dev 分支,新功能都写在里面,没问题了再合并,刚刚支持了词法闭包……其实就是在定义函数的时候复制一部分环境呗。 明天打算试试看尾递归优化。 |
8
tioover OP 尾递归原本只是对函数体归约的思路,不过 提醒了我蹦跳床函数,这个东西专门把尾递归栈转化成循环,不错。
昨天把尾递归给弄好了,今天迷迷糊糊的已经忘了昨天的思路了,但是测试了一下工作正常,尾递归计算过程中内存占用也比较稳定,那就好了。 不过效率令人发指,和racket 比较了一下,差了人家百倍吧,还是递归空转的效率,不过也就是一个练习用的东西。 嗯,总之作为一个练习项目差不多是完成了的,之后是修修补补了吧,有空把里面的递归都变成循环,毕竟Python 不提倡递归。 打算SICP 大成以后用C 写一个,最好能编译…… |