我正在努力学习一些clojure,现在我已经陷入了连续序列 . 我想从现有的创建一个新序列,但是newone必须只包含顶级元素或所有嵌套的总和 . 例如,从'(1 2(3 4))必须有'(1 2 7) . 我想我是正确的方法来钉它,但我有一个错误:
user=> (make-new '(1 2 (3 4)))
IllegalArgumentException Don't know how to create ISeq from: java.lang.Long
clojure.lang.RT.seqFrom (RT.java:505)
这是我的代码:
(defn sum
[list]
(reduce + (into-array (flatten list))))
(defn make-head
[item]
(if (seq? (first item))
(sum (first item))
item
))
(defn make-new
[list]
(cons(make-head (first list)) (seq (make-new (rest list)))))
希望可以有人帮帮我 . 谢谢 .
2 回答
从
make-head
删除first
,因为您已经从make-new
调用first
:另外,只需在
make-new
中使用(map make-head list)
即可 . 没有必要自己实现map
:最后,
+
已经减少(它是可变参数),所以你可以像这样实现sum
:一种更简洁的方法,利用
(flatten [42])
导致(42)
的事实:你也可以试试
for
: