[gambit-list] Help with a macro expansion.
Bradley Lucier
lucier at math.purdue.edu
Fri Sep 27 14:20:45 EDT 2013
Marc:
I'm trying to write my own tracing routine for my new naive-div routine,
and it's a little tricky.
I wrote the following macro to (1) use naive-div-new for naive-div, (2)
collect the args and results of all calls to naive-div-new when
computing an expression, (3) resetting naive-div to naive-div-orig, and
(4) pretty-printing some of the results.
(define-macro (while-tracing-naive-div-new expression)
(let ((result (gensym))
(args+result (gensym)))
`(let ((,args+result '()))
(set! naive-div
(lambda (u v)
(let ((result (naive-div-new u v)))
(set! ,args+result (cons (list u v result)
,args+result))
result)))
;; calculate expression with naive-div-new
(let ((result ,expression))
;; set naive-div back to naive-div-orig before calling any more
number-manipulating routines
(set! naive-div naive-div-orig)
(pp (map (lambda (args+result)
(append args+result (list (naive-div-orig (car args+result)
(cadr args+result)))))
,args+result))
;; supposed to return result, but returns #!void ????????????????
result))))
I use it in the following way:
(while-tracing-naive-div-new (string->number (number->string
xx)))
which expression is expanded by
gsc -expansion -c test-naive-div.scm > ! crap.scm
to
(let ((#:g4 ('#<procedure #24 ##box> '())))
(let ((begin-temp.27
(set! naive-div
(lambda (u v)
(let ((result (naive-div-new
u
v)))
(let ((begin-temp.24
('#<procedure #31
##set-box!>
#:g4
('#<procedure #5
cons>
('#<procedure
#6 list>
u
v
result)
('#<procedure
#25 ##unbox>
#:g4)))))
result))))))
(let ((result ('#<procedure #28
string->number>
('#<procedure #29
number->string>
xx))))
(let ((begin-temp.26
(set! naive-div naive-div-orig)))
(let ((begin-temp.25
(pp ('#<procedure #32 map>
(lambda (args+result)
('#<procedure #33 append>
args+result
('#<procedure #6 list>
(naive-div-orig
('#<procedure #9 car>
args+result)
('#<procedure #34
cadr>
args+result)))))
('#<procedure #25 ##unbox>
#:g4)))))
#!void)))))
So where did the #!void at the end come from?
Brad
More information about the Gambit-list
mailing list