Clojure直接将一个集合映射到另一个集合?

Clojure直接将一个集合映射到另一个集合?,clojure,Clojure,有没有一种方法可以将函数应用于集合并直接返回集合?正如Alex所说,来自algo.generic的函数提供了此函数,不过如果您查看源代码,它的作用与您的代码完全相同。我建议您在代码中将函数放在一个util名称空间中,可能不值得为一个函数放入整个库。使用Clojure 1.7.0(仍处于beta版),您可以使用转换器来实现这一点: user=> (map inc #{1 2 3}) (2 4 3) user=> (into #{} (map inc #{1 2 3})) #{4 3 2

有没有一种方法可以将函数应用于集合并直接返回集合?

正如Alex所说,来自algo.generic的函数提供了此函数,不过如果您查看源代码,它的作用与您的代码完全相同。我建议您在代码中将函数放在一个util名称空间中,可能不值得为一个函数放入整个库。

使用Clojure 1.7.0(仍处于beta版),您可以使用转换器来实现这一点:

user=> (map inc #{1 2 3})
(2 4 3)
user=> (into #{} (map inc #{1 2 3}))
#{4 3 2}

一种更通用的方法是使用
empty

(定义我的地图[f c]
(进入(空c)
(图f c)))
这将产生以下结果:

(我的地图公司){1 2 3};=>#{2 3 4}
(我的地图公司[1 2 3]);=>[2 3 4] 
(我的地图公司(1233));=>(4 3 2)

它也适用于其他应用。

提供了
fmap
,其实现与您的集合示例非常相似。好吧,语言中没有内置的东西支持这一点。如第三个示例所示,
mymap
在给定
seq
时将以相反的顺序生成结果。当给定
seq
时,最好让
my map
遵从
map
(into #{} (map inc) #{1 2 3})