Clojure 应用与映射

标签 clojure

我有一个从函数返回的序列(foundApps),我想将函数映射到它的所有元素。由于某种原因,applycount 适用于序列,但 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/

相关文章:

clojure - Clojure 中#_ 的目的是什么?

merge - Clojure:仅当键在两个映射中时才组合 HashMap ?

clojure - 如何在当前命名空间中应用 use 子句中的符号

multithreading - Clojure async/go 如何停放阻塞代码

java - 在 Clojure 命名空间中排除 java.lang.*

clojure - 语法引用宏参数?

clojure - clojure 可以评估混合数量函数链并在需要时返回部分函数吗?

Clojure 按值获取映射键

clojure - 如何访问 leiningen 配置文件上的值?

Clojure:反转 contains 的参数?用于 condp