diff options
Diffstat (limited to 'rust/src/step7_quote.rs')
| -rw-r--r-- | rust/src/step7_quote.rs | 28 |
1 files changed, 14 insertions, 14 deletions
diff --git a/rust/src/step7_quote.rs b/rust/src/step7_quote.rs index ac0634d..acd487c 100644 --- a/rust/src/step7_quote.rs +++ b/rust/src/step7_quote.rs @@ -26,7 +26,7 @@ fn read(str: String) -> MalRet { // eval fn is_pair(x: MalVal) -> bool { match *x { - List(ref lst) => lst.len() > 0, + List(ref lst,_) => lst.len() > 0, _ => false, } } @@ -37,7 +37,7 @@ fn quasiquote(ast: MalVal) -> MalVal { } match *ast.clone() { - List(ref args) => { + List(ref args,_) => { let ref a0 = args[0]; match **a0 { Sym(ref s) => { @@ -50,7 +50,7 @@ fn quasiquote(ast: MalVal) -> MalVal { } if is_pair(a0.clone()) { match **a0 { - List(ref a0args) => { + List(ref a0args,_) => { let a00 = a0args[0].clone(); match *a00 { Sym(ref s) => { @@ -82,7 +82,7 @@ fn eval_ast(ast: MalVal, env: Env) -> MalRet { Sym(ref sym) => { env_get(env.clone(), sym.clone()) }, - List(ref a) | Vector(ref a) => { + List(ref a,_) | Vector(ref a,_) => { let mut ast_vec : Vec<MalVal> = vec![]; for mv in a.iter() { let mv2 = mv.clone(); @@ -91,10 +91,10 @@ fn eval_ast(ast: MalVal, env: Env) -> MalRet { Err(e) => { return Err(e); }, } } - Ok(match *ast { List(_) => list(ast_vec), + Ok(match *ast { List(_,_) => list(ast_vec), _ => vector(ast_vec) }) }, - Hash_Map(ref hm) => { + Hash_Map(ref hm,_) => { let mut new_hm: HashMap<String,MalVal> = HashMap::new(); for (key, value) in hm.iter() { match eval(value.clone(), env.clone()) { @@ -117,19 +117,19 @@ fn eval(mut ast: MalVal, mut env: Env) -> MalRet { //println!("eval: {}", ast); let ast2 = ast.clone(); match *ast2 { - List(_) => (), // continue + List(_,_) => (), // continue _ => return eval_ast(ast2, env), } // apply list match *ast2 { - List(_) => (), // continue + List(_,_) => (), // continue _ => return Ok(ast2), } let ast3 = ast2.clone(); let (args, a0sym) = match *ast2 { - List(ref args) => { + List(ref args,_) => { if args.len() == 0 { return Ok(ast3); } @@ -167,7 +167,7 @@ fn eval(mut ast: MalVal, mut env: Env) -> MalRet { let a1 = (*args)[1].clone(); let a2 = (*args)[2].clone(); match *a1 { - List(ref binds) | Vector(ref binds) => { + List(ref binds,_) | Vector(ref binds,_) => { let mut it = binds.iter(); while it.len() >= 2 { let b = it.next().unwrap(); @@ -242,7 +242,7 @@ fn eval(mut ast: MalVal, mut env: Env) -> MalRet { "fn*" => { let a1 = (*args)[1].clone(); let a2 = (*args)[2].clone(); - return Ok(malfunc(eval, a2, env.clone(), a1)); + return Ok(malfunc(eval, a2, env.clone(), a1, _nil())); }, "eval" => { let a1 = (*args)[1].clone(); @@ -260,12 +260,12 @@ fn eval(mut ast: MalVal, mut env: Env) -> MalRet { Err(e) => Err(e), Ok(el) => { let args = match *el { - List(ref args) => args, + List(ref args,_) => args, _ => return err_str("Invalid apply"), }; match *args.clone()[0] { - Func(f) => f(args.slice(1,args.len()).to_vec()), - MalFunc(ref mf) => { + Func(f,_) => f(args.slice(1,args.len()).to_vec()), + MalFunc(ref mf,_) => { let mfc = mf.clone(); let alst = list(args.slice(1,args.len()).to_vec()); let new_env = env_new(Some(mfc.env.clone())); |
