【问题标题】:Why define-values is not bound in a Racket macro with #lang racket/base?为什么定义值没有绑定在带有#lang racket/base 的 Racket 宏中?
【发布时间】:2018-11-11 09:44:03
【问题描述】:

我正在尝试学习如何在 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 会抱怨这个呢?

【问题讨论】:

    标签: macros racket


    【解决方案1】:

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

    【讨论】:

    • 我没有想到,因为教程提到And at compile time, only racket/base is required for you automatically—not the full racket...我想我误解了它的意思。
    • @renato 本教程在第 3.1 节的页边空白处有注释。说实话,一开始可能会有点混乱。在 3.4 节中,Greg 解释了 #lang racket 在编译时需要 racket/base。然而#lang racket/base 并没有做同样的事情(这是很自然的假设)。
    猜你喜欢
    • 2014-12-23
    • 2016-01-24
    • 1970-01-01
    • 1970-01-01
    • 2013-04-22
    • 1970-01-01
    • 1970-01-01
    • 2011-02-22
    • 2017-02-04
    相关资源
    最近更新 更多