Clojure を使用して SICP のいくつかの演習を実行しようとしていますが、Simpson のルールを実行する現在の方法 (例 1-29) でエラーが発生します。これは遅延/熱心な評価と関係がありますか? これを修正する方法についてのアイデアはありますか? エラーとコードは次のとおりです。
java.lang.ClassCastException: user$simpson$h__1445 は clojure.lang.Numbers.divide で java.lang.Number にキャストできません (Numbers.java:139)
コードは次のとおりです。
(defn simpson [f a b n]
(defn h [] (/ (- b a) n))
(defn simpson-term [k]
(defn y [] (f (+ a (* k h))))
(cond
(= k 0) y
(= k n) y
(even? k) (* 2 y)
:else (* 4 y)))
(* (/ h 3)
(sum simpson-term 0 inc n)))