为什么在#lang球拍/基础的球拍宏中未定义定义值?

时间:2018-11-11 09:44:04

标签: macros racket

我正在尝试学习如何在球拍中编写宏。 我已经完成了出色的Fear of Macros教程,现在尝试尝试一些基本思想。

因此,我对my-if的定义与本教程中显示的略有不同,并且在以下地方出现了错误define-values: unbound identifier;

#lang racket/base

(define-syntax (my-if stx)
  (define-values (_ condition yes no)
    (apply values (syntax->list stx)))
  (datum->syntax stx `(if ,condition ,yes ,no)))

如果我使用#lang racket而不是racket/base,就可以使用。

在《手册》中查找define-values的定义,它似乎是racket/base的一部分!

define-values  provided from racket/base, racket

那为什么Racket对此有所抱怨?

1 个答案:

答案 0 :(得分:4)

在阶段1(编译时)也使用(require (for-syntax racket/base))导入racket/base。使用#lang racket/base仅在阶段0(运行时)提供define-values