这次尝试在clojure地图重写时出了什么问题

时间:2016-01-20 05:43:12

标签: clojure

我是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)))))))

非常感谢任何帮助(以及对代码的批评)。

谢谢!

1 个答案:

答案 0 :(得分:0)

经过一番调查后,我意识到我忘了添加:

[& args]

-main函数中docstring的末尾,如:

(defn -main
"Call the mapset function"
[& args]
(mapset inc [1 1 2 2]))