|
|
@ -78,4 +78,31 @@
|
|
78
|
78
|
|
|
79
|
79
|
((call/fresh fives) empty-state)
|
|
80
|
80
|
|
|
81
|
|
;; 4.3 interleaved streams
|
|
|
81
|
;; 4.3 interleaved streams
|
|
|
82
|
|
|
|
83
|
(define (mplus $1 $2)
|
|
|
84
|
(cond
|
|
|
85
|
((null? $1) $2)
|
|
|
86
|
((procedure? $1) (lambda () (mplus $2 ($1))))
|
|
|
87
|
(else (cons (car $1) (mplus (cdr $1) $2)))))
|
|
|
88
|
|
|
|
89
|
(define (sixes x)
|
|
|
90
|
(disj (≡ x 6) (lambda (s/c) (lambda () ((sixes x) s/c)))))
|
|
|
91
|
|
|
|
92
|
(define fives-and-sixes
|
|
|
93
|
(call/fresh (lambda (x) (disj (fives x) (sixes x)))))
|
|
|
94
|
|
|
|
95
|
;; 5 utilities
|
|
|
96
|
|
|
|
97
|
(define (expand n s)
|
|
|
98
|
(if (> n 1)
|
|
|
99
|
(cond
|
|
|
100
|
((null? s) s)
|
|
|
101
|
((procedure? (cdr s)) `(,(car s) . ,(expand (- n 1) ((cdr s)))))
|
|
|
102
|
(else `(,(car s) . ,(expand (- n 1) (cdr s)))))
|
|
|
103
|
s))
|
|
|
104
|
|
|
|
105
|
(expand 5 (fives-and-sixes empty-state))
|
|
|
106
|
|
|
|
107
|
(define (run n g)
|
|
|
108
|
(expand n (g empty-state)))
|