[gambit-list] Noob Problem with Macros?

Marc Feeley feeley at iro.umontreal.ca
Fri Aug 7 23:05:14 EDT 2020


Your code works fine with a recent build of Gambit.  Please see the build instructions here: https://github.com/gambit/gambit

Marc



> On Aug 7, 2020, at 4:25 PM, William <william at soukoreff.com> wrote:
> 
> 
> 
> 
> Hello,
> 
> Sorry to bother everyone with what I’m sure is a silly-noob question…
> 
> I’m trying to learn about Scheme macros, and I’m having trouble getting
> what I think is a relatively straight-forward macro to work in Gambit.
> 
> This formulation of my “while” macro works just fine:
> 
> (define-macro (while test . code)
>   `(let loop ()
>      (if ,test
>         (begin , at code (loop)) )))
> 
> ~ ~ ~ ~ script output STARTS ~ ~ ~ ~
> Script started on Fri Aug  7 15:45:49 2020
> bash-3.2$ gsi
> Gambit v4.9.3
> 
>> (define-macro (while test . code)
>   `(let loop ()
>      (if ,test
>         (begin , at code (loop)) )))
>> (define i 0)
>> (while (< i 10)
>    (println "i = " i)
>    (set! i (+ i 1)) )
> i = 0
> i = 1
> i = 2
> i = 3
> i = 4
> i = 5
> i = 6
> i = 7
> i = 8
> i = 9
>> ,q
> bash-3.2$
> ~ ~ ~ ~ script output ENDS ~ ~ ~ ~
> 
> Note that the gambit interpreter was started WITHOUT any command-line
> arguments, and in particular without “-:s”.
> 
> My formulations of what I believe to be this same macro using SYNTAX-RULES
> and SYNTAX-CASE, both fail regardless of whether I start the interpreter
> with “-:s” or not:
> 
> Here’s my code:
> 
> (define-syntax while
>   (syntax-rules ()
>      ((_ test code ...)
>         (let loop ()
>            (if test
>               (begin code ... (loop)) )))))
> 
> (define-syntax while
>   (lambda (x)
>      (syntax-case x ()
>         ((_ test code ...)
>            (syntax
>               (let loop ()
>                  (if test
>                     (begin code ... (loop)) )))))))
> 
> 
> And here is what happens when I try to run these:
> 
> ~ ~ ~ ~ script output STARTS ~ ~ ~ ~
> bash-3.2$
> bash-3.2$ gsi
> Gambit v4.9.3
> 
>> (define-syntax while
>   (syntax-rules ()
>      ((_ test code ...)
>         (let loop ()
>            (if test
>               (begin code ... (loop)) )))))
> *** ERROR IN (console)@2.18 -- Ill-formed expression
>> ,q
> bash-3.2$
> bash-3.2$
> bash-3.2$ gsi -:s
> Gambit v4.9.3
> 
>> (define-syntax while
>   (syntax-rules ()
>      ((_ test code ...)
>         (let loop ()
>            (if test
>               (begin code ... (loop)) )))))
> *** ERROR -- Ill-formed special form: syntax-error
> (##syntax-error %%%%tmp18)
>> ,q
> bash-3.2$
> bash-3.2$
> bash-3.2$
> bash-3.2$ gsi
> Gambit v4.9.3
> 
>> (define-syntax while
>   (lambda (x)
>      (syntax-case x ()
>         ((_ test code ...)
>            (syntax
>               (let loop ()
>                  (if test
>                     (begin code ... (loop)) )))))))
> *** ERROR IN (console)@3.22 -- Ill-formed expression
>> ,q
> bash-3.2$ gsi -:s
> Gambit v4.9.3
> 
>> (define-syntax while
>   (lambda (x)
>      (syntax-case x ()
>         ((_ test code ...)
>            (syntax
>               (let loop ()
>                  (if test
>                     (begin code ... (loop)) )))))))
> *** ERROR -- Ill-formed special form: syntax-error
> (##syntax-error %%%%tmp18)
>> 
> ,q
> bash-3.2$
> ~ ~ ~ ~ script output ENDS ~ ~ ~ ~
> 
> 
> I’m using the most up-to-date version of Gambit from the MacPorts
> collection (v4.9.3), on a relatively up-to-date MacBook computer to run
> these.
> 
> What am I missing?
> 
> And lastly, does my problem have anything to do with this?
> 
>   https://github.com/gambit/gambit/issues/384
> 
> And if so, is there a newer version of gambit that I can submit to
> MacPorts to make macros work again?
> 
> Thanks,
> - William
> 
> 
> 
> 
> 
> _______________________________________________
> Gambit-list mailing list
> Gambit-list at iro.umontreal.ca
> https://mailman.iro.umontreal.ca/cgi-bin/mailman/listinfo/gambit-list





More information about the Gambit-list mailing list