Разница между определением и определением*

Простите мое невежество, но в чем разница между этими двумя:

(define blah)
(define* blah)

? К сожалению, Google игнорирует символ звездочки.


person Matthew    schedule 24.05.2012    source источник
comment
Можете ли вы опубликовать более подробный фрагмент рабочего кода? Или где вы нашли код с использованием специальной формы define*?   -  person Óscar López    schedule 25.05.2012


Ответы (3)


SRFI 89 был написан автором Gambit, поэтому справедливо предположить, что define* Gambit делает то, что говорит этот документ. :-)

Другими словами, это синтаксический сахар над lambda* (как описано в SRFI 89), а не lambda.

person Chris Jester-Young    schedule 26.05.2012

В (довольно обширной) документации схемы Gambit есть нет упоминания о специальной форме define*; это может быть какая-то процедура, определение, макрос или специальная форма, встречающаяся только в той части кода, где вы ее видели. Вы должны опубликовать ссылку со ссылкой на источник кода, где используется define*.

person Óscar López    schedule 25.05.2012

Немного больше контекста для вопроса было бы неплохо.

Иногда * просто означает, что форма делает что-то дополнительное. Таким образом, я предполагаю, что 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))]))
person soegaard    schedule 25.05.2012