clojure - 附加到函数中的向量

标签 clojure

我有两列不同长度的列(向量),想要创建一个新的行向量(如果该列有足够的元素)。我正在尝试创建一个新向量(请参阅下面的失败尝试)。在 Java 中,这将涉及以下步骤:迭代向量、检查条件、追加到向量、返回向量。这里需要递归吗?我确信这并不难解决,但它与过程代码有很大不同。

(defn rowmaker [colA colB]
  "create a row of two columns of possibly different length"
  (let [mia (map-indexed vector colA)
        rows []]
    (doseq [[i elA] mia]
        ;append if col has enough elements
       (if (< i (count colA)) (vec (concat rows elA)))  ; ! can't append to rows
       (if (< i (count colB)) (vec (concat rows (nth colB i)))
    ;return rows   
    rows)))

预期的示例输入/输出

(rowMaker ["A1"] ["B1" "B2"])
; => [["A1" "B1“] [“" "B2"]]

最佳答案

(defn rowMaker [colA colB]
  "create a row from two columns"
  (let [ca (count colA) cb (count colB)
        c (max ca cb)
        colA (concat colA (repeat (- c ca) ""))
        colB (concat colB (repeat (- c cb) ""))]
    (map vector colA colB)))

关于clojure - 附加到函数中的向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29999316/

相关文章:

clojure - 有没有一些方法可以避免 clojure 中出现这种重复代码?

java - 如何覆盖所有导入的 Java 库的 log4j 属性?

clojure - 重新实现 clojure 的惰性序列

clojure - Ring wrap-json-body 不是将 json 数据转换为关键字映射,而是转换为字符串映射

clojure - 将此 Clojure 调用转换为惰性序列

clojure - 编写函数时 “true” 有什么用,给定键和映射,返回 “true”

dictionary - Clojure: map 函数没有返回我可以评估的东西

java - 用于重载和覆盖方法的 Clojure gen-class

authentication - 在单页Clojure Web应用程序中使用Friend进行身份验证和授权

clojure - 如何在 Clojure 中解析异构树