【发布时间】:2011-05-01 13:20:15
【问题描述】:
我有以下输入:
(def nums [123456789012 123456789012])
我想要以下输出:
[[1234 5678 9012] [1234 5678 9012]]
*注意这两个序列都包含数字而不是字符串...
我认为通过执行以下操作会非常简单:
- 将每个条目转换为字符串
- 将每个字符串分割为 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)) 时,我得到了相同的结果。
那么 clojure 专家我哪里错了?这是一个好方法吗?顺便提一句。我刚开始学习clojure,所以我当然不是专家。
【问题讨论】:
-
另外,当我转换回整数时,我确信我需要处理可能的前导零,但我认为这不会太难修复:-)
-
哇! stackoverflow clojure 社区很棒。很多好的答案,我现在也看到了我的愚蠢错误和一些更好的想法。我会在尝试后不久投票。
标签: clojure