2015-11-16 2 views
0

Так что я получил этот список вернулся из заходящих линий:Новичок в Clojure: попытка применить функцию к элементам в списке

(def lines (into() (clojure.string/split-lines (slurp "input.txt")))) 

И у меня есть эти две функции:

(defn tokenize-line [x] (clojure.string/split x #" ")) 

(defn tokenize-list [lst] (for [x lst] (tokenize-line [x]))) 

Когда я прохожу (lines) в качестве параметра tokenize-list, я получаю эту ошибку:

ClassCastException clojure.lang.PersistentList cannot be cast to clojure.lang.IFn 

Я не могу понять где эта ошибка исходит, любая помощь будет потрясающей!

ответ

2

В clojure (lines) означает «вызов функциональных строк без аргументов». Как видно из вашего определения, lines не является функцией, это список.

Кроме того, в (tokenize-line [x]) вы передаете вектор, содержащий строку x, функции, которая ожидает строку.

Кроме того, при запуске (into() ...) это занимает нечто, что уже было последовательностью, и превращает его в обратную последовательность (из-за поведения () при добавлении элементов они заканчиваются в обратном порядке).

+0

Спасибо, тонна, снова я совершенно новый, поэтому это действительно помогает! –

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