我一定对如何定义函数有误解。我正在做这个 SICP 练习,“定义一个以三个数字作为参数并返回两个较大数字的平方和的过程。”
我在 REPL 中尝试了这个,它似乎有效:
=> (reduce + (map (fn [x] (* x x)) (rest (sort '(2 1 0)))))
5
但是定义一个过程并用参数替换数字会给我一个错误:
=> (defn my-procedure [a b c] (reduce + (map (fn [x] (* x x)) (rest (sort '(a b c))))))
ClassCastException clojure.lang.Symbol cannot be cast to java.lang.Number clojure.lang.Numbers.multiply (Numbers.java:146)
我没看到什么?谢谢!