2015-04-16 1 views
2

Это моя первая попытка использования многопоточной первого макроса Моя цель состоит в том, чтобы положить вектор через map, а затем filterПопытка использовать поточной макросы и получаю ошибку

(-> [1 2 3 4 5 6 7 8] 
    (filter (fn [x] (<= x 3))) 
    (map (fn [x] (* 10 x)))) 

Я получаю

Error: function (x){return (10 * x); 
}is not ISeqable 
    at Error (<anonymous>) 
    at cljs.core.seq 

Что это значит?

+0

вам нужно использовать '- >>' – cfrick

+0

@cfrick почему? вы можете уточнить? – ilyo

ответ

6

Вам нужно будет использовать ->>. Документ:

Нити expr через формы. Вставляет x как последний элемент в первом виде, составляя его, если он не является номером . Если есть другие формы, вставляет первую форму в качестве последнего элемента в виде второй и т.д.

многопоточные называют есть filter и map, которые и взять список в качестве второго паров. -> ставит их в качестве первого параметра. Таким образом, ваш код будет выглядеть так: (filter [1 2 3 4 5 6 7 8] (fn [x] (<= x 3))), ваша функция не является seq, следовательно, ошибка.

+0

Как небольшое примечание: в CLJS и Clojure 1.7.0 вы можете использовать преобразователи, которые IMO упрощают: '(в [] (comp (filter ...) (map ...)) [1 2 3 4 5 6 ]) ' – ClojureMostly

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