Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;;For Chicken Scheme only. Other lisps are sane enough to still support (define-macro).
- (define-syntax define-macro
- (er-macro-transformer
- (lambda (exp rename compare)
- (if (symbol? (cadr exp))
- (let ((name (cadr exp))
- (expndr (caddr exp))
- (-exp (gensym)) (-rename (gensym)) (-compare (gensym)))
- `(define-syntax ,name
- (er-macro-transformer (lambda (,-exp ,-rename ,-compare)
- (apply ,expndr (cdr ,-exp))))))
- (let ((name (caadr exp))
- (formals (cdadr exp))
- (body (cddr exp))
- (-exp (gensym)) (-rename (gensym)) (-compare (gensym)))
- `(define-syntax ,name
- (er-macro-transformer (lambda (,-exp ,-rename ,-compare)
- (apply (lambda ,formals ,@body) (cdr ,-exp))))))))))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement