我想使用下一个代码从clojure上的地图添加值:
(letfn [(r [l a]
(if (empty? l)
a
(if (map? l)
(r (first(vals l)) (+ a (first (vals l))))
(r (rest l) (+ a (first l))))))]
(r {:a 1 :b 2 :c 3} 0)
Run Code Online (Sandbox Code Playgroud)
但我收到以下错误:
IllegalArgumentException不知道如何从以下位置创建ISeq:java.lang.Long clojure.lang.RT.seqFrom(RT.java:542)
问题是在代码中您正在测试emptyon l,但不确定l是否为seq。您应该在stacktrace中进一步查找:
不知道如何从以下位置创建ISeq:java.lang.Long
Run Code Online (Sandbox Code Playgroud)RT.java: 528 clojure.lang.RT/seqFrom RT.java: 509 clojure.lang.RT/seq core.clj: 137 clojure.core/seq core.clj: 5948 clojure.core/empty? <------ REPL: 13 user/eval19330/r REPL: 16 user/eval19330/r REPL: 21 user/eval19330
发生这种情况是因为(first (vals l))作为l参数传递给下一个迭代的是数字而不是seq,在您的情况下,它只是value 1。
| 归档时间: |
|
| 查看次数: |
4454 次 |
| 最近记录: |