Update scripts for next exercises

main
Felix Martin 2021-02-24 13:59:48 -05:00
parent 36f9f625ea
commit 5067f5414c
2 changed files with 44 additions and 7 deletions

View File

@ -355,7 +355,7 @@
(b (analyze (if-fail-second exp))))
(lambda (env succeed fail)
(a env
(lambda (a-value fail2) (succeed a-value fail))
(lambda (a-value fail2) (succeed a-value fail2))
(lambda () (b env succeed fail))))))
;;; Amb-Eval input:
@ -368,22 +368,55 @@
(require (even? x))
x)
'all-odd)
))
(assert (first result) 'all-odd)
(amball '(begin
(if-fail (let ((x (amb 1 3 5 8)))
(require (even? x))
x)
'all-odd)
))
(assert (first result) 8)
(assert result '(8 all-odd))
(display "\nex-4.53\n")
; (let ((pairs '()))
; (if-fail (let ((p (prime-sum-pair '(1 3 5 8) '(20 35 110))))
; (permanent-set! pairs (cons p pairs))
; (amb))
; pairs))
; The code will yield all prime-sum-pairs as expected.
(display "[answered]\n")
(display "\nex-4.54\n")
; Exercise 4.54. If we had not realized that require could be implemented as
; an ordinary procedure that uses amb, to be defined by the user as part of a
; nondeterministic program, we would have had to implement it as a special
; form. This would require syntax procedures
(define (require? exp) (tagged-list? exp 'require))
(define (require-predicate exp) (cadr exp))
; and a new clause in the dispatch in analyze
; ((require? exp) (analyze-require exp))
; as well the procedure analyze-require that handles require expressions.
; Complete the following definition of analyze-require.
(define (analyze-require exp)
(let ((pproc (analyze (require-predicate exp))))
(lambda (env succeed fail)
(pproc env
(lambda (pred-value fail2)
(if <??>
<??>
(succeed 'ok fail2)))
fail))))
(display "[done]\n")

4
ex-4_55-xx.scm Normal file
View File

@ -0,0 +1,4 @@
(load "util.scm")
(display "\nex-4.55\n")