コンビネータとパラメタライズ (解決編)

コンビネータとパラメタライズが相性が悪いという話を前回は書いた。

コンビネータとパラメタライズ - 主題のない日記

しかし、冷静に考えると簡単な話だった。 値を適用する段階までパラメタライズを遅らせればいいだけだ。 parameterize を以下の定義に置換えるだけで期待する動作になる。

(define-syntax $parameterize
  (syntax-rules ()
    ((_ ((p e) ...) body)
     (lambda(s)(parameterize ((p e) ...) (body s))))))

Document ID: 725ae5acd484c6207985646d876cf1eb