增加Clojure映射中的值

增加Clojure映射中的值,clojure,functional-programming,Clojure,Functional Programming,我决定投身于Clojure。到目前为止,我真的很喜欢以不变和功能性的方式思考问题。然而,我偶然发现了一个我不知道如何优雅地解决的问题 我希望将映射应用于一组值,但我希望函数应用于集合中每个新值的增量 例如 我试图在我的集合上映射一个函数,结果是: ("a is item number 1" "b is item number 2" "c is item number 3") 如果您能为我们的指导提供帮助,我们将不胜感激。您需要的是一种方法,可以将某些状态带到包含当前项索引的映射函数中 实现这一

我决定投身于Clojure。到目前为止,我真的很喜欢以不变和功能性的方式思考问题。然而,我偶然发现了一个我不知道如何优雅地解决的问题

我希望将映射应用于一组值,但我希望函数应用于集合中每个新值的增量

例如

我试图在我的集合上映射一个函数,结果是:

("a is item number 1" "b is item number 2" "c is item number 3")

如果您能为我们的指导提供帮助,我们将不胜感激。

您需要的是一种方法,可以将某些状态带到包含当前项索引的映射函数中

实现这一点的一种方法是利用这样一个事实,即当给定多个集合作为输入时,
map
,充当拉链,并使用每个列表中的一个元素调用映射函数

这有什么帮助?如果将第二个集合设为从零开始的无限序列,则将使用参数“a”和0、然后是“b”和1等来调用函数:

(map (fn [x i] (str x " is item number " (inc i))) data (range))
事实证明,这是一种常见的模式,Clojure为此提供了一个核心功能—
映射索引

(map-indexed (fn [i x] (str x " is item number " (inc i))) data)

第二个示例中只有两个不同之处:参数的顺序颠倒了,您不需要提供第二个集合。

您需要的是一种向包含当前项索引的映射函数传递某种状态的方法

实现这一点的一种方法是利用这样一个事实,即当给定多个集合作为输入时,
map
,充当拉链,并使用每个列表中的一个元素调用映射函数

这有什么帮助?如果将第二个集合设为从零开始的无限序列,则将使用参数“a”和0、然后是“b”和1等来调用函数:

(map (fn [x i] (str x " is item number " (inc i))) data (range))
事实证明,这是一种常见的模式,Clojure为此提供了一个核心功能—
映射索引

(map-indexed (fn [i x] (str x " is item number " (inc i))) data)
第二个示例中只有两个不同之处:参数的顺序颠倒,不需要提供第二个集合