14 个版本 (4 个重大更新)
0.5.0 | 2022年7月20日 |
---|---|
0.4.1 | 2022年4月29日 |
0.3.1 | 2022年2月19日 |
0.2.5 | 2022年2月2日 |
0.1.3 | 2022年1月14日 |
#389 在 编程语言
每月下载量 39
375KB
9K SLoC
λ Marwood
Marwood 是一个可嵌入的 方案 R7RS 实现,具有以下功能
- 方案 R7RS 编译器及 64 位运行时
- 使用 rustyline 的基于终端的 repl
- 在 repl.marwood.io 上提供 WebAssembly repl。
以及以下方案语言特性
- 大多数 R7RS 语言和库特性
- 尾调用优化
- 一等继续(call/cc)
- 支持方案的数值层,包括有理数
- 对 syntax-rules 的部分支持
示例
添加器示例创建了一个名为 make-adder
的过程,它接受一个参数 x 并返回一个过程,该过程将其自己的参数 y 添加到 x。
此示例可以通过以下命令执行:cargo run --example adder
。
以下是给定 rust 示例将在虚拟机中执行的方案
(define make-adder
(lambda (x)
(lambda (y) (+ x y))))
(define add-1000
(make-adder 1000))
(add-1000 0)
(add-1000 1)
(add-1000 2)
(add-1000 3)
(add-1000 4)
以及执行上述方案在 marwood 中的 rust 代码
let mut vm = Vm::new();
vm.eval_text("(define make-adder (lambda (x) (lambda (y) (+ x y))))")
.unwrap();
vm.eval_text("(define add-1000 (make-adder 1000))")
.unwrap();
for it in 0..5 {
match vm.eval(&list!["add-1000", it]) {
Ok(result) => {
println!("{} => {}", it, result);
assert_eq!(result, cell![1000 + it])
}
Err(e) => error!("error: {}", e),
}
}
许可证
根据 Apache 许可证,版本 2.0 或 MIT 许可证 许可。
依赖项
~1–1.7MB
~35K SLoC