>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 <[email protected]> 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: [email protected] | http://www.gkc.org.uk
> G.K.Chesterton site: http://www.gkc.org.uk/gkc | Erdos number: 4
>
> _______________________________________________
> Chicken-users mailing list
> [email protected]
> https://lists.nongnu.org/mailman/listinfo/chicken-users
>
_______________________________________________
Chicken-users mailing list
[email protected]
https://lists.nongnu.org/mailman/listinfo/chicken-users