为什么有条件的减少原因会返回?

时间:2012-04-12 19:32:13

标签: clojure

给定以下函数,它接受两个参数(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))))))

减少回报无。

为什么?

1 个答案:

答案 0 :(得分: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