1

给定以下函数,它采用两个参数(csv-data1 和 csv-data2,只有两行的向量向量和保证不匹配,因此将在我的输出中得到 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 回答