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

MIT/Apache

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.0MIT 许可证 许可。

依赖项

~1–1.7MB
~35K SLoC