関数型言語の勉強にSICPを読もう - (64) 4章 - 超言語的抽象(222ページ) C++でSchemeインタプリタを作ろう13

問題4.5の前に

condをifに展開する部分は書いてあったのだけど、translateをしてなかったので急いでコードを書く。
translateCondで、こんなCondを new してやります。

Cond::Cond(Clauses* clauses, Objects* elseActions)

で、うまく動いています。

(begin
  (define a "hello")
  (define b 10)
  (cond (0 (display a) (display b))
        (0 (display b) (display a))
        (else (display "else daze"))))


ここまではとてもきれいなのですが、問題4.5は嫌な感じです。
なんと cond には以下のような拡張構文がある!

(define a (lambda (x) (+ x 3)))
(cond (1 => a))

上の場合 (a 1)が呼ばれます。
何で突然こんな謎構文があるんだろう(泣。あまり美しくないような気が・・・。
汚く書くならすぐ実装できそうだけど、如何にきれいに書くかをじっくり考えることにする。


※「SICPを読もう」の目次はこちら


計算機プログラムの構造と解釈
ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン 和田 英一
ピアソンエデュケーション (2000/02)
売り上げランキング: 56,404