1

所以我有这个功能:

(define (try try-block catch-block finally-block)
    ; Implements try/catch/finally like in most other languages
    )

为此,我想创建一个“助手”宏,以避免(lambda () ...)一遍又一遍地说,有点像setsetq

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

如何正确实现此功能?

4

2 回答 2

1

没关系,我找到了...

事实证明我需要使用expand

于 2012-03-18T09:07:24.997 回答
1

'expand' 可以完成这项工作,您还可以查看 'letex',它是 'let' 和 'expand' 的组合。

于 2012-03-18T15:33:48.960 回答