[gambit-list] Help with a macro expansion.

Marc Feeley feeley at iro.umontreal.ca
Fri Sep 27 14:31:50 EDT 2013


It seems you need commas before your references of result.

Marc

On 2013-09-27, at 2:20 PM, Bradley Lucier <lucier at math.purdue.edu> wrote:

> 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