Как вызвать макрос when в макросе Chicken Scheme?

Chicken Scheme определяет макрос (when), эквивалентный (if (begin)). Однако, когда я пытаюсь вызвать это из одного из моих собственных макросов, он жалуется, что «переменная» не определена:

(define-syntax blah
 (ir-macro-transformer
  (lambda (expr inject compare)
   (when something
    (do-something)))))

Ошибка: во время раскрытия (бла...) - несвязанная переменная: когда

Что я могу import сделать, чтобы это сработало?


person Sod Almighty    schedule 10.08.2016    source источник
comment
Если something ложно, каким будет расширение?   -  person Sylwester    schedule 11.08.2016
comment
Не было бы ни одного. Это эквивалентно (if something (begin (do-something))), что является вполне допустимым кодом.   -  person Sod Almighty    schedule 11.08.2016
comment
Да, но помните, что результат оценивается как код. Результат (if something (begin (do-something))), когда something ложно, не будет правильным кодом, и макрос должен стать кодом. Ваша программа остановится с загадочной ошибкой недопустимый неатомарный объект: #‹unspecified›, поскольку возвращаемое ложное значение — это значение #<unspecified>   -  person Sylwester    schedule 11.08.2016
comment
Я понимаю это. И это часто случается, когда я пишу макросы, так как я только начал работать со Scheme. Но дело не в этом и не имеет ничего общего с ошибкой, которую я получаю. Все, что я хочу сделать, это иметь возможность вызывать встроенные макросы Chicken Scheme, такие как when. Это совершенно не связано с тем, правильный ли мой макрос.   -  person Sod Almighty    schedule 11.08.2016
comment
Ok. Кроме того, вам нужно импортировать символы для использования во время расширения макроса. Для яиц это (use-for-syntax <name-of-egg>). Я думаю, нам нужно подождать, пока более продвинутый пользователь курицы ответит, что импортировать.   -  person Sylwester    schedule 11.08.2016
comment
Да, я знаю о use-for-syntax. Я как бы надеялся на что ;)   -  person Sod Almighty    schedule 11.08.2016


Ответы (1)


Тот же ответ, что и ваш другой вопрос; просто (import-for-syntax chicken) и все готово.

person sjamaan    schedule 11.08.2016