Итак, у меня есть эта функция:
(define (try try-block catch-block finally-block)
; Implements try/catch/finally like in most other languages
)
, для которого я хотел бы создать «вспомогательный» макрос, который избавляет от необходимости повторять (lambda () ...)
снова и снова, вроде set
и setq
:
(define-macro (tryq try-block catch-block finally-block)
(try
(lambda () (eval try-block))
(lambda () (eval catch-block))
(lambda () (eval finally-block))))
Однако, поскольку lambda
задерживает свои аргументы, вышеприведенная программа не работает - try-block
внутри eval
пуста к моменту оценки, поскольку она находится внутри lambda
.
Как мне реализовать эту функцию правильно ?