【问题标题】:Difference between define and define*定义和定义的区别*
【发布时间】:2012-05-24 21:39:19
【问题描述】:

原谅我的无知,但这两者有什么区别:

(define blah)
(define* blah)

?不幸的是,Google 忽略了星号字符。

【问题讨论】:

  • 你能发布更详细的工作代码吗?或者您在哪里找到使用 define* 特殊形式的代码?

标签: scheme gambit


【解决方案1】:

SRFI 89 是由 Gambit 的作者编写的,因此可以公平地假设 Gambit 的 define* 符合文档中的说明。 :-)

换句话说,它是 lambda*(如 SRFI 89 中所述)而不是 lambda 的语法糖。

【讨论】:

    【解决方案2】:

    在 Gambit Scheme 的(相当广泛的)documentation 中没有提到 define* 特殊形式;它可能是某些过程、定义、宏或特殊形式,只能在您看到的代码中找到。您应该发布一个链接,引用使用define* 的代码源。

    【讨论】:

      【解决方案3】:

      为这个问题提供更多上下文会很好。

      有时 * 只是表示表单做了一些额外的事情。 因此,我的猜测是 define* 可以像普通定义一样工作, 但同时做了一些额外的事情。这个额外的可以 自动从模块中导出名称。

      这个定义是在 Racket ffi-lib 中找到的说明 这个原则:

      (define-syntax define*
        (syntax-rules ()
          [(_ (name . args) body ...)
           (begin (provide name) (define (name . args) body ...))]
          [(_ name expr)
           (begin (provide name) (define name expr))]))
      

      【讨论】:

        猜你喜欢
        • 2011-08-18
        • 2016-05-08
        • 1970-01-01
        • 1970-01-01
        • 2011-03-26
        • 2017-06-29
        • 1970-01-01
        • 2016-09-02
        • 1970-01-01
        相关资源
        最近更新 更多