関数型言語の勉強に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)が呼ばれます。
何で突然こんな謎構文があるんだろう(泣。あまり美しくないような気が・・・。
汚く書くならすぐ実装できそうだけど、如何にきれいに書くかをじっくり考えることにする。
計算機プログラムの構造と解釈
posted with amazlet on 06.05.31