【发布时间】:2012-05-24 21:39:19
【问题描述】:
原谅我的无知,但这两者有什么区别:
(define blah)
(define* blah)
?不幸的是,Google 忽略了星号字符。
【问题讨论】:
-
你能发布更详细的工作代码吗?或者您在哪里找到使用
define*特殊形式的代码?
原谅我的无知,但这两者有什么区别:
(define blah)
(define* blah)
?不幸的是,Google 忽略了星号字符。
【问题讨论】:
define* 特殊形式的代码?
SRFI 89 是由 Gambit 的作者编写的,因此可以公平地假设 Gambit 的 define* 符合文档中的说明。 :-)
换句话说,它是 lambda*(如 SRFI 89 中所述)而不是 lambda 的语法糖。
【讨论】:
在 Gambit Scheme 的(相当广泛的)documentation 中没有提到 define* 特殊形式;它可能是某些过程、定义、宏或特殊形式,只能在您看到的代码中找到。您应该发布一个链接,引用使用define* 的代码源。
【讨论】:
为这个问题提供更多上下文会很好。
有时 * 只是表示表单做了一些额外的事情。 因此,我的猜测是 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))]))
【讨论】: