2009-10-06 4 views
1
(defn get-doc-list [a-term] 
    (map #(Integer/parseInt %)(take-nth 3 (take (* 3 3)(rest (rest a-term)))))) 

Эта функция хорошо работает в небольших списках, но возвращает пустую последовательность на более крупные. В чем проблема?Почему эта функция возвращает ноль? Это потому, что Д.С. ленив?

+0

Что означает символ df в вашей функции? Когда я набираю код в REPL, он жалуется, что df не определен. – chollida

+0

Извините. df - еще одна функция. Заменяется произвольным термином. – unj2

ответ

1

Это, конечно, вопрос ввода, так как ваша функция будет анализировать не более 3 целых числа:

user=> (get-doc-list (repeat "1")) 
(1 1 1) 

И только возвращают пустую последовательность, если менее 3-х строк поставляются:

user=> (get-doc-list ["1" "1"]) 
() 

и бросить исключение, если дана не строка:

user=> (get-doc-list [1 1 1]) 
java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String 

Я предлагаю проверить, что такое inpu т он «не может» с на самом деле ... может быть, вы передаете в чем-то вроде [[ «1» «1» «1» ...]]

user=> (get-doc-list [["1" "1" "1"]]) 
() 

Это вектор векторов, как вы может видеть, что ничего не обрабатывается, поэтому нет никакой ошибки или последовательности для генерации.

0

Проблема заключается в использовании вами функции take, которая возвращает только первые n элементов коллекции. Независимо от того, насколько велика коллекция, которую вы проходите, get-doc-list, только первые 9 пройдут до take-nth.

+0

Думаю, я неправильно понял ваш вопрос. При запуске вашего кода я обнаружил, что получаю список из 3 парсеризованных целых чисел, независимо от того, насколько большой список я передаю. Интересно, является ли проблема вашим методом 'df'. Не могли бы вы включить это в свой вопрос? –

+0

При чтении предыдущей версии вашего вопроса, я думаю, что, увидев определение 'df', пролить свет на ситуацию, поскольку« a-term »передается как аргумент этой функции. –

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