一个简化的scheme 解释器/编译器。
- boolean,
#t
,#f
- number
- string
- symbol
- function,包括基本过程、复合过程
- list/pair,空表
()
也归入此列
内部表示。如果对基本类型,也使用('bool <val>)
, ('str val)
... 的方式,那么数据的表示方式就统一了。
但是有点麻烦,因为判断boolean的时候,不能直接用eq?
,而要(equal? expr '(bool #f))
了。
而且,基本的操作,如+
, -
, >
, string=?
都要自己在解释层重新实现一遍,相当麻烦。
所以,暂时的,对基本类型,直接使用原始数据,不使用tag-list的方式吧(?)。
使用hash + pair的方式。
(<hash> <link>)
,link指向外层的env。
提供以下API:
- lookup
- extend
- env-add
用于处理
def
- env-set!
用于处理
set!
- def
- set!
- if
- fn
lambda 写起来太麻烦了,使用fn。 - quote
- quasiquote, unquote, unquote-splicing
- begin
- call/cc
- defmacro
暂时不是考虑的重点。
- SICP
抽象屏障当然重要,但是感觉书中的例子,也太啰嗦了,可读性也没有太大的提高。 不如dybvig使用record、record-case写的简洁、易读。 - 编译器原理
- arc的源码