Простите мое невежество, но в чем разница между этими двумя:
(define blah)
(define* blah)
? К сожалению, Google игнорирует символ звездочки.
Простите мое невежество, но в чем разница между этими двумя:
(define blah)
(define* blah)
? К сожалению, Google игнорирует символ звездочки.
SRFI 89 был написан автором Gambit, поэтому справедливо предположить, что define*
Gambit делает то, что говорит этот документ. :-)
Другими словами, это синтаксический сахар над lambda*
(как описано в SRFI 89), а не lambda
.
В (довольно обширной) документации схемы Gambit есть нет упоминания о специальной форме 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))]))
define*
? - person Óscar López   schedule 25.05.2012