我有以下输入:
(def nums [123456789012 123456789012])
我想要以下输出:
[[1234 5678 9012] [1234 5678 9012]]
*注意这两个序列都包含数字而不是字符串......
我认为通过执行以下操作会非常简单:
将每个条目转换为String
将每个字符串分区为4
将每个分区转换回整数
这是我失败的尝试:
(defn split-nums [nums factor] (map #(map (fn [x] (Integer/valueOf (str x))) (partition factor (str %))) nums)) (println (split-nums nums, 4))
当我运行这个时,我收到以下错误:
Caused by: java.lang.NumberFormatException: For input string: "clojure.lang.LazySeq@4834333c"
这告诉我,我正在处理一个懒惰的序列,我需要强制评估,但当我尝试(str(doall x))我得到相同的结果.
所以我在哪里出错?这是一个好方法吗?BTW.我刚刚开始学习clojure,所以我当然不是专家.
为什么首先转换为String?这是一个带/
和的版本mod
.这也将修复您的前导零问题.
(defn int-partition [num size] (let [f (int (Math/pow 10 size))] (loop [n num l ()] (if (zero? n) (vec l) (recur (int (/ n f)) (conj l (mod n f))))))) (defn split-nums [nums factor] (vec (map #(int-partition % factor) nums)))