Я работаю через функциональное программирование для объектно-ориентированного программиста Брайана Марика и застрял в упражнении 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
Результаты, которые я получаю, совершенно неожиданны и не поняты.Что я делаю не так и что на самом деле говорят мои результаты?