eclisp 0.2.0

Bindings for Embeddable Common Lisp
use eclisp::{Lisp, LispError};

// Based on https://lisp-lang.org/learn/clos

fn main() -> Result<(), LispError> {
    let lisp = Lisp::new()?;

    lisp.enter(|ctx| -> Result<(), LispError> {
        ctx.eval(
            r#"
(defclass vehicle ()
  ((speed :accessor vehicle-speed
          :initarg :speed
          :type real)))

(defclass canoe (vehicle)
  ((rowers :reader canoe-rowers
           :initarg :rowers
           :initform 0
           :type (integer 0))))

(defparameter canoe (make-instance 'canoe :speed 10 :rowers 6))"#,
        )?;

        let canoe = ctx.eval("(make-instance 'canoe :speed 10 :rowers 6)")?;

        let rowers = ctx.call("canoe-rowers", &[&canoe])?;
        let speed = ctx.call("vehicle-speed", &[&canoe])?;
        println!("Rowers: {rowers}, speed: {speed}");

        Ok(())
    })?;

    Ok(())
}