1#[allow(unused_macros)]
24#[macro_export]
25macro_rules! lisp {
26
27
28 ( { $e:expr } ) => {
30 $e
31 };
32
33
34 ( ( $($val:tt)* ) ) => {
36 $crate::model::Value::List([ $(lisp!{ $val }),* ].iter().collect::<$crate::model::List>())
37 };
38
39
40 (nil) => { $crate::model::Value::NIL };
43 (NIL) => { $crate::model::Value::NIL };
44 (t) => { $crate::model::Value::True };
45 (T) => { $crate::model::Value::True };
46 (f) => { $crate::model::Value::False };
47 (F) => { $crate::model::Value::False };
48
49
50 ($sym:ident) => {
52 $crate::model::Value::Symbol($crate::model::Symbol(String::from(stringify!( $sym ))))
53 };
54 ( + ) => { $crate::model::Value::Symbol($crate::model::Symbol(String::from("+"))) };
56 ( - ) => { $crate::model::Value::Symbol($crate::model::Symbol(String::from("-"))) };
57 ( * ) => { $crate::model::Value::Symbol($crate::model::Symbol(String::from("*"))) };
58 ( / ) => { $crate::model::Value::Symbol($crate::model::Symbol(String::from("/"))) };
59 ( == ) => { $crate::model::Value::Symbol($crate::model::Symbol(String::from("=="))) };
60 ( != ) => { $crate::model::Value::Symbol($crate::model::Symbol(String::from("!="))) };
61 ( < ) => { $crate::model::Value::Symbol($crate::model::Symbol(String::from("<"))) };
62 ( <= ) => { $crate::model::Value::Symbol($crate::model::Symbol(String::from("<="))) };
63 ( > ) => { $crate::model::Value::Symbol($crate::model::Symbol(String::from(">"))) };
64 ( >= ) => { $crate::model::Value::Symbol($crate::model::Symbol(String::from(">="))) };
65
66
67 ($e:literal) => {
69 $crate::parser::parse(stringify!($e)).next().unwrap().unwrap()
74 };
75}