>From the Standard Prelude <http://programmingpraxis.com/standard-prelude> at my blog <http://programmingpraxis.com>:
(define-syntax (define-macro x) (syntax-case x () ((_ (name . args) . body) (syntax (define-macro name (lambda args . body)))) ((_ name transformer) (syntax (define-syntax (name y) (syntax-case y () ((_ . args) (datum->syntax-object (syntax _) (apply transformer (syntax-object->datum (syntax args))))))))))) On Mon, May 13, 2019 at 1:24 PM Martin Ward <mar...@gkc.org.uk> wrote: > > The FermaT program transformation system is implemented in WSL > and translated to Scheme for compiling or interpreting. > > It was originally developed using SCM scheme which uses defmacro > to define macros, eg: > > (defmacro floop (name . body) > `(call-with-current-continuation > (lambda (,name) > (do () (#f #t) > ,@body)))) > > (defmacro pop (v1 v2) > `(begin > (set! ,v1 (car ,v2)) > (set! ,v2 (cdr ,v2)))) > > (defmacro push (v e) > `(set! ,v (cons ,e ,v))) > > I am trying to port it to other Scheme versions. For bigloo > I can use define-macro to define defmacro as a macro: > > (define-macro (defmacro name . forms) > \`(define-macro (,name . ,(car forms)) ,\@(cdr forms))) > > Chicken scheme does not appear to have defmacro or define-macro > but does have define-syntax. > > Is there a way to define defmacro using define-syntax? > > -- > Martin > > Dr Martin Ward | Email: mar...@gkc.org.uk | http://www.gkc.org.uk > G.K.Chesterton site: http://www.gkc.org.uk/gkc | Erdos number: 4 > > _______________________________________________ > Chicken-users mailing list > Chicken-users@nongnu.org > https://lists.nongnu.org/mailman/listinfo/chicken-users >
_______________________________________________ Chicken-users mailing list Chicken-users@nongnu.org https://lists.nongnu.org/mailman/listinfo/chicken-users