Почему define-values ​​не связаны в макросе Racket с #lang racket / base? - PullRequest
0 голосов
/ 11 ноября 2018

Я пытаюсь научиться писать макросы в Racket. Я прошел превосходный урок Страх перед макросами и сейчас пытаюсь поэкспериментировать с основными идеями.

Итак, я определил 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

Так почему же Ракет жалуется на это?

1 Ответ

0 голосов
/ 11 ноября 2018

Используйте (require (for-syntax racket/base)) для импорта racket/base также на этапе 1 (время компиляции). Использование #lang racket/base обеспечивает define-values только на фазе 0 (время выполнения).

...