나는 작동하는 다음과 같은 코드가 있습니다-> 취하지 않는 이유는 (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)))
을 나는이에 필터 (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