我有一个从函数返回的序列(foundApps),我想将函数映射到它的所有元素。由于某种原因,apply
和 count
适用于序列,但 map
不适用于:
(apply println foundApps)
(map println rest foundApps)
(map (fn [app] (println app)) foundApps)
(println (str "Found " (count foundApps) " apps to delete"))))
打印:
{:description another descr, :title apptwo, :owner jim, :appstoreid 1235, :kind App, :key #<Key App(2)>} {:description another descr, :title apptwo, :owner jim, :appstoreid 1235, :kind App, :key #<Key App(4)>}
Found 2 apps to delete for id 1235
因此,apply
似乎很适合该序列,但 map
却不然。我哪里傻了?
最佳答案
我有一个简单的解释,这是这篇文章所缺少的。让我们想象一个抽象函数 F 和一个向量。所以,
(apply F [1 2 3 4 5])
翻译为
(F 1 2 3 4 5)
这意味着 F
在最好的情况下必须是可变参数。
同时
(map F [1 2 3 4 5])
翻译为
[(F 1) (F 2) (F 3) (F 4) (F 5)]
这意味着F
必须是单变量,或者至少是这样的。
关于类型有一些细微差别,因为 map
实际上返回一个惰性序列而不是向量。但为了简单起见,我希望这是可以原谅的。
关于Clojure 应用与映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2311528/