Toy-Scheme
February 10, 2026 · View on GitHub
这是一个Scheme语言解释器,使用C语言实现了大部分R5RS的语法特性,参考计算机程序的构造和解释中元解释器的原理。
Feature
支持的表达式:
quote'(quote简写)quasiquote/`unquote/,unquote-splicing/,@defineiflambdabegincondletlet*letrecdefine-syntax+syntax-rules(常用模式)...
支持的内部过程:
+整数求和-整数求差*整数求积/整数求商quotient整数求商remainder求余数=判断整数是否相等<判断整数大小>判断整数大小cons连接两个列表或原子car求列表的表头cdr求列表的表尾set-car!设置列表的表头set-cdr!设置列表的表尾list构造列表eq?判断两个列表或原子是否相等eqv?/equal?等价判断null?判断是否为空表boolean?判断是否为布尔型symbol?判断是否是符号integer?判断是否为整数char?判断是否为字符string?判断是否为字符串pair?判断是否为序对vector?/vector/vector-length/vector-ref/vector-set!vector->list/list->vectorprocedure?判断是否为内部过程或复合过程apply/map/for-eachcall/ccnumber->string将整数转换为字符串string->number将字符串转换为整数symbol->string将符号转换为字符串string->symbol将字符串转换为符号string-length/string-ref/substring/string-appendchar->integer/integer->charenvironment查看全局环境中绑定的变量read/write/display/newlineread-line/eof-object?open-input-file/open-output-fileclose-input-port/close-output-portcurrent-input-port/current-output-portload加载并执行指定 Scheme 文件
Build & Install
clone 项目后在项目根目录执行:
chmod +x ./COMPILE ./INSTALL ./TEST ./scripts/*.sh
# 编译(输出在 ./build)
./COMPILE
# 同时会同步根目录可执行文件 ./Toy-Scheme
# 安装到 /usr/local/bin(需要管理员权限)
USE_SUDO=1 ./INSTALL
Usage
直接进入REPL环境
./Toy-Scheme
在交互终端中支持方向键编辑、历史记录和 ( 自动补 )(依赖系统 readline/libedit,若缺失会自动降级为原始输入模式)。
解释指定的源文件,使用命令./build/Toy-Scheme -f [file]
./build/Toy-Scheme -f hello.scm
Test
运行完整测试集:
./TEST
测试中间产物会放在项目目录下的 ./test-artifacts/。
Examples
- 元解释器:
./Toy-Scheme -f examples/meta-scheme/demo.scm - 线性回归(梯度下降):
./Toy-Scheme -f examples/ml-linear-regression/linear_regression.scm - CSV + SQL 子集引擎:
./Toy-Scheme -f examples/sql-engine/demo.scm
Requirement
为了编译项目,需要有以下的组件:
- GCC / Clang
- Cmake
Author
Wu Lei (wuleiatso@gmail.com)