Kaynağa Gözat

rangeproof fixed

plato 5 yıl önce
ebeveyn
işleme
fb127250a5
1 değiştirilmiş dosya ile 33 ekleme ve 2 silme
  1. 33 2
      lisp/lisp.rs

+ 33 - 2
lisp/lisp.rs

@@ -448,7 +448,23 @@ fn eval(mut ast: MalVal, mut env: Env) -> MalRet {
                                             }
                                         }
                                     } else {
-                                        right_vec.push((v[0].pr_str(false), v[1].pr_str(false)));
+                                        if v.to_vec().len() == 1 {
+                                            let result = eval(v.to_vec()[0].clone(), env.clone())?;
+                                            if let List(val, _) = result {
+                                                for ele in val.iter() {
+                                                    // println!("{:?}", ele);
+                                                    if let Vector(ele_vec, _) = ele {
+                                                        right_vec.push((
+                                                            ele_vec[0].pr_str(false),
+                                                            ele_vec[1].pr_str(false),
+                                                        ));
+                                                    }
+                                                }
+                                            }
+                                        } else {
+                                            right_vec
+                                                .push((v[0].pr_str(false), v[1].pr_str(false)));
+                                        }
                                     }
                                 }
                             }
@@ -467,7 +483,22 @@ fn eval(mut ast: MalVal, mut env: Env) -> MalRet {
                                             }
                                         }
                                     } else {
-                                        out_vec.push((v[0].pr_str(false), v[1].pr_str(false)));
+                                        if v.to_vec().len() == 1 {
+                                            let result = eval(v.to_vec()[0].clone(), env.clone())?;
+                                            if let List(val, _) = result {
+                                                for ele in val.iter() {
+                                                    // println!("{:?}", ele);
+                                                    if let Vector(ele_vec, _) = ele {
+                                                        out_vec.push((
+                                                            ele_vec[0].pr_str(false),
+                                                            ele_vec[1].pr_str(false),
+                                                        ));
+                                                    }
+                                                }
+                                            }
+                                        } else {
+                                            out_vec.push((v[0].pr_str(false), v[1].pr_str(false)));
+                                        }
                                     }
                                 }
                             }