Как связать макрос внутри лямбды в newLISP? - PullRequest
1 голос
/ 18 марта 2012

Итак, у меня есть эта функция:

(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.

Как мне реализовать эту функцию правильно ?

Ответы [ 2 ]

1 голос
/ 18 марта 2012

'expand' выполнит эту работу, и вы также можете посмотреть на 'letex', который является комбинацией 'let' и 'expand'.

1 голос
/ 18 марта 2012

Не бери в голову, я нашел это ...

Оказывается, мне нужно использовать , развернуть .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...