私の作品次のコードを持っている:それはもうコンパイルされませんなぜ - >は(fn ...)を取っていないのですか?
(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)))))
:
(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
)関数をインライン化することを変更した場合を。エラーは次のとおりです。
#<CompilerException java.lang.RuntimeException: java.lang.IllegalArgumentException: Don't know how to create ISeq from: clojure.lang.Symbol (NO_SOURCE_FILE:227)>
誰も私にこれを説明することはできますか?
私が解決しようとしている問題は、マップおよびフィルタが最後のパラメータとしてコレクションを取ることです、まだstr/partition
は最初としてコレクションを取りますので、私は->
を使用して2つをミックスしようとしているが、map
をカリー化だし、 filter
は、コレクションの1つ(最初の)パラメータのみを取り込む関数に変換されます。
[関数呼び出し] - > [スレッドマクロ](http://stackoverflow.com/questions/7838326/function-call-in-threading-macro) – 4e6