我正在研究Brian Marick的面向对象程序员的函数式编程,并坚持练习4。我想出的解决方案与同一个github站点上的解决方案相同:https://github.com/marick/fp-oo/blob/master/solutions/just-enough-clojure.clj。
这是我的版本。
(def factorial (fn [num] (apply * (range 1 (inc num)))))
在repl中执行该操作的结果是:
user=> factorial 5
#object[user$factorial 0x3cd52491 "user$factorial@3cd52491"]
5
我期望120。我创建了一个中间函数:
(def range-to (fn [num] (range 1 (inc num))))
然后在以下代码中使用:
user=> (range-to 5)
(1 2 3 4 5)
user=> (apply * (range-to 5))
120
我得到的结果完全出乎意料,并且无法理解。我在做什么错,我的结果实际上是在说什么?