我有以下的代碼工作的:如果我改變它內聯過濾器(f
)和MAP(m
)函數來此爲什麼 - >不採取(FN)?
(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)))
:
(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
成函數,只需要一個(第一個)參數進行採集進入。
請參閱[函數調用 - >線程宏](http://stackoverflow.com/questions/7838326/function-call-in-threading-macro) – 4e6 2012-01-11 07:30:25