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 ,@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 ,@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