定义和定义之间的区别*

时间:2012-05-24 21:39:19

标签: scheme gambit

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

(define blah)
(define* blah)

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

3 个答案:

答案 0 :(得分:1)

SRFI 89是由Gambit的作者撰写的,所以假设Gambit的define*执行该文件所说的是公平的。 : - )

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

答案 1 :(得分:0)

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

答案 2 :(得分: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))]))