1

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

(define blah)
(define* blah)

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

4

3 回答 3

1

SRFI 89是由 Gambit 的作者编写的,因此假设 Gambit 的define*所作所为是公平的。:-)

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

于 2012-05-26T05:28:39.063 回答
0

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

于 2012-05-25T00:34:03.077 回答
0

这个问题的更多背景会很好。

有时 * 只是意味着表单做了一些额外的事情。因此,我的猜测是 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))]))
于 2012-05-25T07:44:43.773 回答