我正在设计一种新的语言,并且想重新定义define
的过程形式,但也要导出标准表达形式。有办法吗?到目前为止,我有以下代码:
(define-syntax-rule (my-define (name args) body ...) ...)
(provide (rename-out [my-define define]) define)
但是会生成错误“定义中已经提供了标识符(作为不同的绑定)”
答案 0 :(得分:2)
以下是my-define
处理这两种情况的示例。
#lang racket
(provide (rename-out [my-define define]))
(require (for-syntax syntax/parse))
(define-syntax (my-define stx)
(syntax-parse stx
[(_define name:id e:expr) (syntax/loc stx (define name e))]
[(_define (name arg ...) body ...) (syntax/loc stx (define (name arg ...) body ...))]))