原谅我的无知,但这两者有什么区别:
(define blah)
(define* blah)
? 不幸的是,谷歌忽略了星号字符。
SRFI 89是由 Gambit 的作者编写的,因此假设 Gambit 的define*
所作所为是公平的。:-)
换句话说,它是语法糖lambda*
(如 SRFI 89 中所述)而不是lambda
.
在 Gambit Scheme 的(相当广泛的)文档中,没有提到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))]))