summaryrefslogtreecommitdiffstats
path: root/ps04_combinators_amb/analyze-amb.scm
diff options
context:
space:
mode:
Diffstat (limited to 'ps04_combinators_amb/analyze-amb.scm')
-rw-r--r--ps04_combinators_amb/analyze-amb.scm17
1 files changed, 13 insertions, 4 deletions
diff --git a/ps04_combinators_amb/analyze-amb.scm b/ps04_combinators_amb/analyze-amb.scm
index 5d5ad56..cc98c12 100644
--- a/ps04_combinators_amb/analyze-amb.scm
+++ b/ps04_combinators_amb/analyze-amb.scm
@@ -2,6 +2,13 @@
;;; Execution procedures take environment
;;; and two continuations: SUCCEED and FAIL
+(define *amb-count* 0)
+(define (show-amb-count)
+ (display "Number of alts considered: ")
+ (display *amb-count*)
+ (newline)
+ (set! *amb-count* 0))
+
(define (ambeval exp env succeed fail)
((analyze exp) env succeed fail))
@@ -187,10 +194,12 @@
(let loop ((alts aprocs))
(if (null? alts)
(fail)
- ((car alts) env
- succeed
- (lambda ()
- (loop (cdr alts)))))))))
+ (begin
+ (set! *amb-count* (+ 1 *amb-count*))
+ ((car alts) env
+ succeed
+ (lambda ()
+ (loop (cdr alts))))))))))
(defhandler analyze analyze-amb amb?)