3

「exceptions.rkt」というファイルがあります

#lang racket
(module exceptions racket
  (provide Macro/Raise Macro/Assert Macro/Assert* Macro/Domain-Assert)

; ... Definitions for provided symbols...

) ; End of module, end of file

Macro/Raiseなどは実際には define-syntax で定義されたマクロではありません。これらは単項関数で生成syntax-rulesされ、名前が割り当てられているだけです。

(define Macro/Raise
  (syntax-rules ()
; ... body not important ...
))

「exceptions.rkt」と同じフォルダに、「tables.rkt」というファイルがあります。

#lang racket
(module tables racket
    (require "exceptions.rkt")
    (define-syntax Assert Macro/Assert)

; ... more stuff...

) ; End of module, end of file

しかし、これはMacro/Assert: undefined; cannot reference an identifier before its definition in module: 'tables phase: 1

ドキュメントを読んでみましたが、何が間違っているのかわかりません...では、何が間違っているのでしょうか?

4

2 に答える 2

3

マクロ定義フェーズで定義を使用できるようにするには、次を使用しますfor-syntax

(require (for-syntax "exceptions.rkt"))
于 2013-09-05T19:23:03.327 に答える