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# >