use eclisp::{Lisp, LispError};
fn main() -> Result<(), LispError> {
let lisp = Lisp::new()?;
lisp.enter(|ctx| -> Result<(), LispError> {
let value = ctx.eval("(+ 1 2)")?;
println!("Result of (+ 1 2): {:?}", value.try_as_i64());
let list = ctx.eval("'(10 20 30)")?;
println!("Result of '(10 20 30): {}", list);
for value in list.iter() {
println!("{}", value?);
}
Ok(())
})?;
lisp.enter(|ctx| ctx.eval("(defun double (n) (* n 2))"))?;
if let Some(doubled_fun) = lisp.fun("double")? {
let doubled = lisp.callfun(&doubled_fun, &[&lisp.int(3)?])?.try_as_i64()?;
println!("3 doubled = {}", doubled);
} else {
println!("Function 'double' not found");
}
Ok(())
}