Crates.io | marwood |
lib.rs | marwood |
version | 0.5.0 |
source | src |
created_at | 2022-01-02 17:01:01.895474 |
updated_at | 2022-07-20 18:22:58.106217 |
description | Scheme R7RS Virtual Machine |
homepage | |
repository | https://github.com/strtok/marwood |
max_upload_size | |
id | 506616 |
size | 431,997 |
Marwood is an embeddable Scheme R7RS implementation, featuring:
And these scheme language features:
The adder example creates a procedure called make-adder
, which given an argument
x returns a procedure that adds its own argument y to x.
This example may be executed with cargo run --example adder
.
Here's the scheme that will execute in the VM given the rust example:
(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)
And the rust code to execute the scheme above in marwood:
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),
}
}
Licensed under either of Apache License, Version 2.0 or MIT license.