我是clojure的新手,并且一直在关注http://www.braveclojure.com的精彩教程。
我正在尝试编写一个新的地图函数,它将返回一组结果。
到目前为止,我有以下代码,但我一直收到错误消息:
java.lang.IllegalArgumentException: Parameter declaration "mapset" should be a vector
这是代码(我正在使用Leiningen):
(defn mapset
"Works like map but returns a set"
; First call to the function
([f items]
(mapset f items []))
; Other calls to the function
([f items result]
(if (empty? items)
(set result)
(recur f (rest items) (conj result (f (first items)))))))
(defn -main
"Call the mapset function"
(mapset inc [1 1 2 2]))
我的第一个版本实际上使用了let
,如下所示,但是会抛出相同的错误:
(defn mapset
"Works like map but returns a set"
; First call to the function
([f items]
(mapset f items []))
; Second call to the function
([f items result]
(if (empty? items)
(set result)
(let [[item & other-items] items]
(recur f (into [] other-items) (conj result (f item)))))))
非常感谢任何帮助(以及对代码的批评)。
谢谢!
答案 0 :(得分:0)
经过一番调查后,我意识到我忘了添加:
[& args]
到-main
函数中docstring的末尾,如:
(defn -main
"Call the mapset function"
[& args]
(mapset inc [1 1 2 2]))