У меня есть следующий код, который работает:
(def *primes*
(let [l "2 3 5 7 11 13 17 19 23 29 31"
f (fn [lst] (filter #(< 0 (count (str/trim %))) lst))
m (fn [lst] (map #(Integer/parseInt %) lst))]
(-> l
(str/partition #"[0-9]+")
f
m)))
Если я изменю его на встроенный фильтр (f
) и сопоставим функции (m
) с этим:
(def *primes*
(let [l "2 3 5 7 11 13 17 19 23 29 31"]
(-> l
(str/partition #"[0-9]+")
(fn [lst] (filter #(< 0 (count (str/trim %))) lst))
(fn [lst] (map #(Integer/parseInt %) lst)))))
больше не компилируется. Ошибка:
#<CompilerException java.lang.RuntimeException: java.lang.IllegalArgumentException: Don't know how to create ISeq from: clojure.lang.Symbol (NO_SOURCE_FILE:227)>
Может кто-нибудь объяснить мне это?
Проблема, которую я пытаюсь решить, состоит в том, что карта и фильтр принимают коллекцию в качестве последнего параметра, но str/partition
принимает коллекцию в качестве первого, поэтому я пытаюсь смешать два, используя ->
вставка map
и filter
в функции, которые принимают только один (первый) параметр для входа в коллекцию.