Răsfoiți Sursa

changed from eval to eval_ast for zconst

ada 5 ani în urmă
părinte
comite
40c68a60af
2 a modificat fișierele cu 4 adăugiri și 11 ștergeri
  1. 2 4
      lisp/core.rs
  2. 2 7
      lisp/lisp.rs

+ 2 - 4
lisp/core.rs

@@ -26,7 +26,7 @@ use std::time::Instant;
 use crate::printer::pr_seq;
 use crate::reader::read_str;
 use crate::types::MalErr::ErrMalVal;
-use crate::types::MalVal::{Atom, Bool, Func, Hash, Int, List, MalFunc, Nil, Str, Sym, Vector};
+use crate::types::MalVal::{Atom, Bool, Func, Hash, Int, List, MalFunc, Nil, Str, Sym, Vector, Add, Lc0};
 use crate::types::{MalArgs, MalRet, MalVal, _assoc, _dissoc, atom, error, func, hash_map};
 
 macro_rules! fn_t_int_int {
@@ -254,9 +254,7 @@ fn conj(a: MalArgs) -> MalRet {
 
 fn add(a: MalArgs) -> MalRet {
     // get next symbol should be lc0 lc1 lc2
-    println!("{:?}", a[0]);
-    println!("{:?}", a[1]);
-    Ok(MalVal::Lc0)
+    Ok(Add(Rc::new(a[0].clone()), Rc::new(a[1].clone())))
 }
 
 fn seq(a: MalArgs) -> MalRet {

+ 2 - 7
lisp/lisp.rs

@@ -267,14 +267,9 @@ fn eval(mut ast: MalVal, mut env: Env) -> MalRet {
                     }
                     Sym(ref a0sym) if a0sym == "zkcons!" => {
                         let (a1, a2) = (l[1].clone(), l[2].clone());
-                        // a1 circuit name, get it from env
-                        // a2 evaluate expression
                         let c = env_get(&env, &a1);
-                        let cond = eval(a2.clone(), env.clone());
-                        println!("{:?} {:?} {:?}", c, a1, cond);
-                        match cond {
-                            _ => Ok(Nil)
-                        }
+                        let cond = eval_ast(&a2, &env);
+                        cond
                     }
                     Sym(ref a0sym) if a0sym == "defzk!" => {
                         let (a1, a2) = (l[1].clone(), l[2].clone());