2017-12-05 3 views
1

第4章の最後の「Clojure for the Brave」のプログラム「FWPDの吸血鬼データ解析プログラム」を理解しようとしています。と真 "。コードは次のとおりです。FWPDの吸血鬼データ解析プログラム、Clojure for the BraveとTrue

(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

具体的なことができますか?あなたは ''(コンバージョンvamp-keyを得る) ''関数が返され、 '' value''に呼び出され、 '' identity''は入力を返す標準関数(すべての関数型言語)です。与えられた? –

+0

私は今理解していると思う。 (変換のvamp-keyを得る)は、identity関数またはstr-> int関数を返し、それらの値の1つを呼び出します。どうもありがとうございました。あなたは私をたくさん助けました。 – nenad

答えて

1

conversionsはマップであり、マップエントリと呼ばれるキー値のペアが含まれています。 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が返されます。