(defn mapset [func ele]
(loop [elements ele
result []]
(if (empty? elements)
(set result)
(let [[first-value & another] elements]
(into result (func first-value))
(recur another result)))))
(def v [1 2 3 4 5])
(mapset + v)
Exeption:
不知道如何创建ISeq:java.lang.Long
谁知道如何解决?
答案 0 :(得分:4)
第一个问题是into
接受集合,而不是集合和单个元素。我想您想要使用conj
代替:
(conj result (func first-value))
另一个问题是Clojure集合(在这种情况下为result
向量)是不可变的,因此像conj
或into
这样的函数会返回一个新的更新集合,而不是修改它们的输入参数,因此您需要将结果用于recur
:
(recur another (conj result (func first-value)))
最后一个问题是你传递+
函数,当应用于单个参数时,它将返回它。我想您想要使用inc
。
因此,您的工作代码应如下所示:
(defn mapset [func ele]
(loop [elements ele
result []]
(if (empty? elements)
(set result)
(let [[first-value & another] elements]
(recur another (conj result (func first-value)))))))
(def v [1 2 3 4 5])
(mapset inc v)
;; => #{4 6 3 2 5}