2017-12-05 8 views
1

"Clojure for the Brave"책의 4 번째 장 끝에있는 "FWPD 용 흡혈귀 데이터 분석 프로그램"을 이해하려고합니다. 및 True ". 코드는 다음과 같습니다.FWPD 용 뱀파이어 데이터 분석 프로그램, 용감한 Clojure

(ns fwpd.core) 

(def filename "suspects.csv") 

(def vamp-keys [:name :glitter-index]) 

(defn str->int 
    [str] 
    (Integer. str)) 

(def conversions {:name identity 
       :glitter-index str->int}) 

(defn convert 
    [vamp-key value] 
    ((get conversions vamp-key) value)) 

(defn parse 
    "Convert a CSV into rows of columns" 
    [string] 
    (map #(clojure.string/split % #",") 
    (clojure.string/split string #"\n"))) 

(defn mapify 
    "Return a seq of maps like {:name \"Edward Cullen\" :glitter-index 10}" 
    [rows] 
(map (fn [unmapped-row] 
    (reduce (fn [row-map [vamp-key value]] 
       (assoc row-map vamp-key (convert vamp-key value))) 
      {} 
      (map vector vamp-keys unmapped-row))) 
    rows)) 

(defn glitter-filter 
    [minimum-glitter records] 
    (filter #(>= (:glitter-index %) minimum-glitter) records)) 

누군가가 변환 및 기능 변환에 도움이 될 수 있습니까?

+1

좀 더 구체적으로 기재 할 수 있습니까? ''(변환 변환 키를 얻는다 ') 함수가'value'에서 호출 될 함수를 리턴하고'identity'는 입력을 리턴하는 표준 함수 (모든 함수형 언어에서)라는 것을 알고 있습니까? 주어진? –

+0

나는 지금 이해할 것 같아. (변환 vamp-key를 얻는다)는 신원 함수 또는 str-> int 함수를 리턴하고 값 중 하나를 호출 할 것입니다. 고맙습니다. 너 나 많이 도와 줬어. – nenad

답변

1

conversions은지도이므로 map-entries라고하는 키 값 쌍이 포함되어 있습니다. get은 가지고있는 모든 것이 키이고 물론지도 일 때 반환되는 각각의 값을 얻을 수있는 함수입니다. 따라서 convert이 작업을 수행하려면 vamp-key:name 또는 :glitter-index이어야합니다 (맵의 유일한 키이므로). :glitter-index이라고 가정하고 str->int이 반환됩니다. 따라서 :

((get conversions vamp-key) value)) 

가된다 : 따라서 vamp-key

(str->int value) 

convert 값이 올바른 기능을 얻기 위해 필요하다. :glitter-index"10"이 인수로 전달되면 10이 반환됩니다.