каждый, я вчера начал работать над проектом Эйлера в Clojure, и у меня есть проблема с одним из моих решений, я не могу найти.
У меня есть эта функция:
(defn find-max-palindrom-in-range [beg end]
(reduce max
(loop [n beg result []]
(if (>= n end)
result
(recur (inc n)
(concat result
(filter #(is-palindrom? %)
(map #(* n %) (range beg end)))))))))
Я пытаюсь запустить его так:
(find-max-palindrom-in-range 100 1000)
и я получаю это исключение:
java.lang.Integer cannot be cast to clojure.lang.IFn
[Thrown class java.lang.ClassCastException]
, который я предполагаю, означает, что в каком-то месте я пытаюсь оценить Integer как функцию. Однако я не могу найти это место, и меня больше всего удивляет то, что все работает, если я просто оцениваю это так:
(reduce max
(loop [n 100 result []]
(if (>= n 1000)
result
(recur (inc n)
(concat result
(filter #(is-palindrom? %)
(map #(* n %) (range 100 1000))))))))
(я только что сократил определение функции и заменил параметры константами)
Заранее благодарен за вашу помощь и извините, что я, вероятно, беспокою вас идиотской ошибкой с моей стороны. Кстати, я использую Clojure 1.1 и новейший SLIME от ELPA.
Редактировать: Вот код для is-palindrom? . Я реализовал это как текстовое свойство числа, а не числовое.
(defn is-palindrom? [n]
(loop [num (String/valueOf n)]
(cond (not (= (first num) (last num))) false
(<= (.length num) 1) true
:else (recur (.substring num 1 (dec (.length num)))))))