Просмотр исходного кода

prove needs scoping to execute more than one expression

plato 5 лет назад
Родитель
Сommit
0d340cdedf
2 измененных файлов с 12 добавлено и 2 удалено
  1. 7 0
      lisp/core.rs
  2. 5 2
      lisp/macros.lisp

+ 7 - 0
lisp/core.rs

@@ -1,6 +1,7 @@
 use std::fs::File;
 use std::io::Read;
 use std::rc::Rc;
+use rand::Rng;
 
 use std::time::{SystemTime, UNIX_EPOCH};
 
@@ -466,6 +467,11 @@ fn seq(a: MalArgs) -> MalRet {
     }
 }
 
+fn gen_rand(a: MalArgs) -> MalRet {
+    let mut rng = rand::thread_rng();
+    Ok(MalVal::Int(rng.gen::<i64>()))
+}
+
 pub fn ns() -> Vec<(&'static str, MalVal)> {
     vec![
         ("=", func(|a| Ok(Bool(a[0] == a[1])))),
@@ -571,5 +577,6 @@ pub fn ns() -> Vec<(&'static str, MalVal)> {
         ("square", func(scalar_square)),
         ("cs::one", func(cs_one)),
         ("second", func(second)),
+        ("genrand", func(gen_rand)),
     ]
 }

+ 5 - 2
lisp/macros.lisp

@@ -9,6 +9,7 @@
 (defmacro! zk-square (fn* [var] (
         (let* [v1 (gensym)
                v2 (gensym)] (
+          (println 'values var)
         `(alloc ~v1 ~var)
         `(alloc ~v2 (square ~var))
         `(enforce  
@@ -22,6 +23,8 @@
 (def! param1 (scalar 1))
 (def! param2 (scalar 3))
 (prove 
-  (zk-square param1)
-  (zk-square param2)
+  (
+    (zk-square param1)  
+    (zk-square param2)
+  )
 )