-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
On 22-Mar-07, at 4:11 AM, Phil Dawes wrote:
Hi Gambit List,
I really like the meroonet object system, however my program contains quite a few syntax-case macros and the meroonet common-lisp style macros don't work once syntax-case is loaded.
I've found that I can switch between the two macro systems using:
(define (switch-to-lisp-macros) (set! ##expand-source (lambda (src) src)))
(define (switch-to-syntax-rules-macros) (set! ##expand-source (lambda (src) (sc-expand src))))
... however this is both a hassle and a global change which I'm guessing prob won't work with threading etc..
Has anybody attempted to build a meroon style system using syntax-case macros? Any pointers would be much appreciated.
Have you considered implementing define-macro on top of syntax-case? I'm not sure how much mileage you can get out of it, but here's one way of defining define-macro:
(define-syntax define-macro (lambda (x) (syntax-case x () ((_ (name . params) body1 body2 ...) (syntax (define-macro name (lambda params body1 body2 ...)))) ((_ name expander) (syntax (define-syntax name (lambda (y) (syntax-case y () ((k . args) (let ((lst (syntax-object->datum (syntax args)))) (datum->syntax-object (syntax k) (apply expander lst))))))))))))
Marc