macro_rules! eval {
( $( $expression:expr ),* ) => { ... };
( $context:expr; $expression:expr ) => { ... };
( $context:expr; $( $expression:expr ),* ) => { ... };
}
Expand description
Evaluate one or more S-Expressions, in the base context or your own custom one.
Examples
use parsley::prelude::*;
assert!(eval!(sexp![SExp::sym("list"), "potato", true, 5]).is_ok());
assert!(eval!(sexp!["potato", true, 5]).is_err());
use parsley::prelude::*;
let evaluated = eval!(
sexp![
SExp::sym("define"),
sexp![SExp::sym("square"), SExp::sym("x")],
sexp![SExp::sym("*"), SExp::sym("x"), SExp::sym("x")]
],
sexp![SExp::sym("square"), 12]
);
assert!(evaluated.is_ok());
assert_eq!(evaluated.unwrap(), SExp::from(144));
use parsley::prelude::*;
let mut ctx = Context::base();
eval!(
ctx;
sexp![
SExp::sym("define"),
sexp![SExp::sym("potato"), SExp::sym("x"), SExp::sym("y")],
SExp::sym("y")
]
);
let evaluated = eval!(ctx; sexp![SExp::sym("potato"), true, 5]);
assert!(evaluated.is_ok());
assert_eq!(evaluated.unwrap(), SExp::from(5));