重新定义一种现有的球拍形式

时间:2018-12-01 08:07:52

标签: racket

我正在设计一种新的语言,并且想重新定义define的过程形式,但也要导出标准表达形式。有办法吗?到目前为止,我有以下代码:

(define-syntax-rule (my-define (name args) body ...) ...)

(provide (rename-out [my-define define]) define)

但是会生成错误“定义中已经提供了标识符(作为不同的绑定)”

1 个答案:

答案 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 ...))]))