「コンピュータープログラムの構造と解釈」の演習1.16(fast-expの反復バージョン)をClojureで実行しようとすると、次のようになりました。
(defn fast-it-exp [base exp res]
(cond (= exp 0) res
(odd? exp) fast-it-exp base (- exp 1) (* base res)
:else fast-it-exp base (/ exp 2) (* base base res)))
試してみます:
user=> (fast-it-exp 0 0 10)
10 ;yep
user=> (fast-it-exp 2 2 2)
1 ;no...
user=> (fast-it-exp 1 1 1)
#<user$fast_it_exp__59 user$fast_it_exp__59@138c63> ;huh?!
cond 式の「奇数」部分は、評価する代わりに関数を返すようです。なんで?述語の後の式を括弧で囲んでみましたが、これは間違った構文のようです。これは私が思いついた最高のものです。Clojure の rev 1146 を使用しています。