Welcome to DrScheme, version 4.2.3 [3m].
Language: Pretty Big; memory limit: 256 megabytes.
METACIRCULAR-EVALUATOR-LOADED
17 success(es) 0 failure(s) 0 error(s) 17 test(s) run
0
inspecting some functions and other data:
(inspect-it map) =>
(compound-procedure (f s) ((if (null? s) '() (cons (f (car s)) (map f (cdr s))))))
function environment:
***** new frame *****
for-sum: (procedure (s) ((let ((total 0)) (for (i s) (set! total (+ i total))) total)) (#))
squid: (procedure (x) ((set! x 5) (set! y 6) (set! z x) x) (#))
z: 5
y: 6
sum: (procedure (s) ((if (eq? s '()) 0 (+ (car s) (sum (cdr s))))) (#))
member: (procedure (x s) ((cond ((eq? s '()) #f) ((eq? x (car s)) #t) (else (member x (cdr s))))) (#))
factorial: (procedure (n) ((if (= n 0) 1 (* n (factorial (- n 1))))) (#))
map: (procedure (f s) ((if (null? s) '() (cons (f (car s)) (map f (cdr s))))) (#))
x: 10
car: (primitive #)
cdr: (primitive #)
cons: (primitive #)
null?: (primitive #)
+: (primitive #)
-: (primitive #)
*: (primitive #)
/: (primitive #)
=: (primitive #)
eq?: (primitive #)
<: (primitive #)
>: (primitive #>)
write: (primitive #)
display: (primitive #)
inspect-it: (primitive #)
***** display environment done *****
#
(inspect-it (+ 3 4)) => 7#
(define (addit n) (lambda (k) (+ n k))) => ok
(define addtwo (addit 2)) => ok
(inspect-it addtwo) =>
(compound-procedure (k) ((+ n k)))
function environment:
***** new frame *****
n: 2
***** new frame *****
addtwo: (procedure (k) ((+ n k)) (# #))
addit: (procedure (n) ((lambda (k) (+ n k))) (#))
for-sum: (procedure (s) ((let ((total 0)) (for (i s) (set! total (+ i total))) total)) (#))
squid: (procedure (x) ((set! x 5) (set! y 6) (set! z x) x) (#))
z: 5
y: 6
sum: (procedure (s) ((if (eq? s '()) 0 (+ (car s) (sum (cdr s))))) (#))
member: (procedure (x s) ((cond ((eq? s '()) #f) ((eq? x (car s)) #t) (else (member x (cdr s))))) (#))
factorial: (procedure (n) ((if (= n 0) 1 (* n (factorial (- n 1))))) (#))
map: (procedure (f s) ((if (null? s) '() (cons (f (car s)) (map f (cdr s))))) (#))
x: 10
car: (primitive #)
cdr: (primitive #)
cons: (primitive #)
null?: (primitive #)
+: (primitive #)
-: (primitive #)
*: (primitive #)
/: (primitive #)
=: (primitive #)
eq?: (primitive #)
<: (primitive #)
>: (primitive #>)
write: (primitive #)
display: (primitive #)
inspect-it: (primitive #)
***** display environment done *****
#
inspecting a function with a complex environment:
expected result for (catch-octopus 100): 165
(define (octopus n) (let ((x 10) (y 20)) (let ((z 30)) (lambda (w) (+ n w x y z))))) => ok
(define catch-octopus (octopus 5)) => ok
(inspect-it catch-octopus) =>
(compound-procedure (w) ((+ n w x y z)))
function environment:
***** new frame *****
z: 30
***** new frame *****
x: 10
y: 20
***** new frame *****
n: 5
***** new frame *****
catch-octopus: (procedure (w) ((+ n w x y z)) (# # # #))
octopus: (procedure (n) ((let ((x 10) (y 20)) (let ((z 30)) (lambda (w) (+ n w x y z))))) (#))
addtwo: (procedure (k) ((+ n k)) (# #))
addit: (procedure (n) ((lambda (k) (+ n k))) (#))
for-sum: (procedure (s) ((let ((total 0)) (for (i s) (set! total (+ i total))) total)) (#))
squid: (procedure (x) ((set! x 5) (set! y 6) (set! z x) x) (#))
z: 5
y: 6
sum: (procedure (s) ((if (eq? s '()) 0 (+ (car s) (sum (cdr s))))) (#))
member: (procedure (x s) ((cond ((eq? s '()) #f) ((eq? x (car s)) #t) (else (member x (cdr s))))) (#))
factorial: (procedure (n) ((if (= n 0) 1 (* n (factorial (- n 1))))) (#))
map: (procedure (f s) ((if (null? s) '() (cons (f (car s)) (map f (cdr s))))) (#))
x: 10
car: (primitive #)
cdr: (primitive #)
cons: (primitive #)
null?: (primitive #)
+: (primitive #)
-: (primitive #)
*: (primitive #)
/: (primitive #)
=: (primitive #)
eq?: (primitive #)
<: (primitive #)
>: (primitive #>)
write: (primitive #)
display: (primitive #)
inspect-it: (primitive #)
***** display environment done *****
#
(inspect-it (catch-octopus 100)) => 165#
>