Selaa lähdekoodia

conditionally select done

plato 5 vuotta sitten
vanhempi
sitoutus
d45d6f0bcf
1 muutettua tiedostoa jossa 9 lisäystä ja 5 poistoa
  1. 9 5
      lisp/examples/macro-test.lisp

+ 9 - 5
lisp/examples/macro-test.lisp

@@ -128,16 +128,20 @@
 ;;         );
 
 (defmacro! conditionally_select (fn* [u v condition] (
-        (let* [u-prime (gensym)] (
+        (let* [u-prime (gensym)
+               v-prime (gensym)] (
             `(def! ~u-prime (alloc ~u-prime (* ~u ~condition)))
-            ;; `(alloc ~v1 u)
-            ;; `(alloc ~v2 v)
-            ;; `(alloc ~condition ~condition)
+            `(def! ~v-prime (alloc ~v-prime (* ~v ~condition)))
             `(enforce
                 (scalar::one ~u)
                 (scalar::one ~condition)
                 (scalar::one ~u-prime)
              )
+            `(enforce
+                (scalar::one ~v)
+                (scalar::one ~condition)
+                (scalar::one ~v-prime)
+             )
         )
 ))))
 
@@ -155,7 +159,7 @@
     ;; (println 'nonzero (zk-nonzero? param3))    
     ;; (println 'not-small-order? (zk-not-small-order? param-u param-v))
     (def! alloc-u (alloc "alloc-u" param-u))
-    ;; (def! alloc-v (alloc "alloc-v" param-v))
+    (def! alloc-v (alloc "alloc-v" param-v))
     (def! condition (alloc "condition" param3))
     (println 'conditionally_select 
         (conditionally_select alloc-u alloc-v condition))