]> git.rkrishnan.org Git - sicp.git/blobdiff - src/sicp/ex4_54.rkt
Merge branch 'master' of github.com:vu3rdd/sicp
[sicp.git] / src / sicp / ex4_54.rkt
diff --git a/src/sicp/ex4_54.rkt b/src/sicp/ex4_54.rkt
new file mode 100644 (file)
index 0000000..79dcb0c
--- /dev/null
@@ -0,0 +1,15 @@
+#lang racket
+
+(define (assert? expr) (tagged-list? expr 'assert))
+
+(define (assert-predicate expr) (first (rest expr)))
+
+(define (analyze-assert exp)
+  (let ((pproc (analyze (assert-predicate exp))))
+    (lambda (env succeed fail)
+      (pproc env
+             (lambda (pred-value fail2)
+               (if (not (true? pred-value))
+                   (fail)
+                   (succeed 'ok fail2)))
+             fail))))
\ No newline at end of file