1

だから私はこの機能を持っています:

(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は a の内部にあるため、評価されるまでには空lambdaです。

この機能を正しく実装するにはどうすればよいですか?

4

2 に答える 2

1

'expand' で十分です。'let' と 'expand' の組み合わせである 'letex' を調べることもできます。

于 2012-03-18T15:33:48.960 に答える
1

気にせず、見つけた...

expandを使用する必要があることがわかりました。

于 2012-03-18T09:07:24.997 に答える