我正在尝试学习一些clojure,现在我已经卡住了whith序列。 我想从现有的创建一个新序列,但是newone必须只包含顶级元素或所有嵌套的总和。例如,从'(1 2(3 4))必须有'(1 2 7)。我想我是正确的方法来钉它,但我有一个错误:
(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)))))
这是我的代码:
{{1}}
希望有人可以帮助我。感谢。
答案 0 :(得分:3)
从first
移除make-head
,因为您已经从first
致电make-new
:
(defn make-head [item]
(if (seq? item)
(sum item)
item))
另外,只需在(map make-head list)
中使用make-new
即可。没有必要自己实施map
:
(defn make-new [list]
(map make-head list))
最后,+
已经减少了(它的可变参数),所以你可以像这样实现sum
:
(defn sum [list]
(apply + (flatten list))
更简洁的方法,利用(flatten [42])
导致(42)
的事实:
(defn make-new [xs]
(map #(apply + (flatten [%])) xs))
答案 1 :(得分:0)
您也可以尝试for
:
(for [i '(1 2 (3 4))]
(if (seq? i)
(reduce + i)
i))