2015-03-15 1 views
0

В эти выходные я решил изучить clojure. Я застрял с reduce.I получить исключение класса литой дляClojure уменьшить невозможно бросить Long до IFn

(reduce #((cond (= %1 0) %2 :else %1)) 0 '(1 1 1)) 

ClassCastException java.lang.Long cannot be cast to clojure.lang.IFn user/eval2092/fn--2093 (form-init1869535703328200664.clj:1) 

Я не уверен, что именно я делаю неправильно. Любая помощь приветствуется :)

ответ

2

Функциональный макрос чтения литералов #(...) автоматически предоставляет круглые скобки для выражения в теле, поскольку это обычно простое приложение-функция. В вашем случае cond расширяется до числового значения 1, тогда заключенные круглые скобки превращают его в (1), что не является допустимым приложением функции.

Удалить внутренние скобки:

(reduce #(cond (= %1 0) %2 :else %1) 0 '(1 1 1)) 

 Смежные вопросы

  • Нет связанных вопросов^_^