переопределение одной из существующих форм ракеток - PullRequest
0 голосов
/ 01 декабря 2018

Я разрабатываю новый язык и хотел бы переопределить процедурную форму define, но также экспортировать форму стандартного выражения.Есть ли способ, которым я могу сделать это?Пока у меня есть этот код:

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

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

, но генерирует идентификатор ошибки ", уже предоставленный (как другая привязка) в: define"

1 Ответ

0 голосов
/ 01 декабря 2018

Вот пример, где 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 ...))]))
...