1

2 つのパラメーター (csv-data1 および csv-data2) を取る次の関数を考えると、ベクトルのベクトルは 2 行しかなく、不一致が保証されているため、出力で cmp-val が取得されます)。

(defn test-key-inclusion
    "Accepts csv-data param and an index, a second csv-data param and an index,
     and searches the second csv-data instances' rows (at index) to see if
     the first file's data is located in the second csv-data instance."

    [csv-data1 pkey-idx1 csv-data2 pkey-idx2 lnam-idx fnam-idx]

    (reduce
        (fn [out-log csv-row1]
            (let [cmp-val (nth csv-row1 pkey-idx1 nil)
                  lnam (nth csv-row1 lnam-idx nil)
                  fnam (nth csv-row1 fnam-idx)
                  temp-rc (first (key-pres? cmp-val pkey-idx2 csv-data2))]

                (if-not (nil? cmp-val)
                    (concat out-log (sorted-map cmp-val (vector lnam fnam))))))
         {}
         csv-data1))

関数内のこの条件付きで、

(if-not (nil? cmp-val)
  (concat out-log (sorted-map cmp-val (vector lnam fnam))))))

リターンゼロを減らします。

何故ですか?

4

1 に答える 1

4

cmp-val が nil の場合、reduce 関数から nil を返すためです。

条件付きである必要があります

(if cmp-val 
    (concat out-log (sorted-map cmp-val (vector lnam fnam))))) 
     out-log)

if-not (nil? foo)と同等であることに注意してくださいif foo

于 2012-04-12T20:04:40.633 に答える