我正在尝试使用 Clojure 完成 SICP 中的一些练习,但我当前执行辛普森规则的方法出现错误(例如 1-29)。这与懒惰/急切的评估有关吗?有想法该怎么解决这个吗?错误和代码如下:
java.lang.ClassCastException:user$simpson$h__1445 不能在 clojure.lang.Numbers.divide (Numbers.java:139) 处转换为 java.lang.Number
这是代码:
(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)))