55 lines
1.1 KiB
Scheme
55 lines
1.1 KiB
Scheme
(load "util.scm")
|
|
(load "misc/sicp-regsim.scm")
|
|
(load "misc/sicp-eceval.scm")
|
|
|
|
(define the-global-environment (setup-environment))
|
|
(set-register-contents! eceval 'exp '(if false 1 2))
|
|
(start eceval)
|
|
(assert (get-register-contents eceval 'val) 2)
|
|
|
|
(display "\nex-5.23 - derived-expressions\n")
|
|
|
|
(set-register-contents! eceval 'exp
|
|
'(cond
|
|
((= 1 2) 0)
|
|
((= 2 3) 1)
|
|
((= 0 4) 2)
|
|
(else 3)))
|
|
(start eceval)
|
|
(assert (get-register-contents eceval 'val) 3)
|
|
|
|
(set-register-contents! eceval 'exp
|
|
'(begin
|
|
(define (square x) (* x x))
|
|
(let ((y (square 3)))
|
|
y)))
|
|
(start eceval)
|
|
(assert (get-register-contents eceval 'val) 9)
|
|
|
|
|
|
(display "\nex-5.24 - cond-special-form\n")
|
|
|
|
(set-register-contents! eceval 'exp
|
|
'(cond
|
|
((= 2 1) 0)
|
|
((= 2 3) 1)
|
|
((= 0 4) 2)
|
|
(else (* 2 5))))
|
|
(start eceval)
|
|
(assert (get-register-contents eceval 'val) 10)
|
|
|
|
|
|
(display "\nex-5.25 - lazy-evaluation\n")
|
|
|
|
(set-register-contents! eceval 'exp
|
|
'(begin
|
|
(define (try a b)
|
|
(if (= a 0) 1 b))
|
|
(try 0 (/ 1 1))))
|
|
(start eceval)
|
|
(assert (get-register-contents eceval 'val) 1)
|
|
|
|
|
|
(display "\nex-5.26\n")
|
|
|