Map 带常数序列上的映射

Map 带常数序列上的映射,map,clojure,functional-programming,constants,sequence,Map,Clojure,Functional Programming,Constants,Sequence,如果我需要为一个映射到序列项的函数提供一个常量值,有没有比目前更好的方法: (map my-function my-sequence (cycle [my-constant-value])) 其中,我的常量值是一个常量,在这个意义上,它对于序列上的映射是相同的,尽管它本身可能是某个函数的结果。我有一种感觉,稍后我会看到我在这里问的问题,并认为这是一个愚蠢的问题,因为如果我以不同的方式构建代码,这不会是一个问题,但事实就是这样 在您的情况下,我将使用匿名函数: (map #(my-functio

如果我需要为一个映射到序列项的函数提供一个常量值,有没有比目前更好的方法:

(map my-function my-sequence (cycle [my-constant-value]))

其中,我的常量值是一个常量,在这个意义上,它对于序列上的映射是相同的,尽管它本身可能是某个函数的结果。我有一种感觉,稍后我会看到我在这里问的问题,并认为这是一个愚蠢的问题,因为如果我以不同的方式构建代码,这不会是一个问题,但事实就是这样

在您的情况下,我将使用匿名函数:

(map #(my-function % my-constant-value) my-sequence)
使用部分应用的函数是另一种选择,但在这种特定情况下没有多大意义:

(map (partial my-function my-constant-value) my-sequence)
您可能需要(也许?)重新定义我的函数,以将常量值作为第一个参数,并且您不需要接受数量可变的参数,因此使用
partial
不会给您带来任何好处。

是的:)api
部分中的一点小宝石

(映射我的函数我的序列(不断映射我的常量值))

在idomatic clojure中,(映射compines数据或新的a常数)的模式相当常见。它的速度相对较快,也适用于分块序列等


编辑:这个答案是错误的,但是
和其他的“其他有用函数”api都很酷,我想把这里的参考留给他们。

我倾向于使用dbyrne建议的部分或匿名函数,但另一个需要注意的工具是
重复
,返回任意值的无限序列:

(map + (range 4) (repeat 10))
=> (10 11 12 13)

我发现另一种比
map
更具可读性的方法是
for
列表理解宏:

(for [x my-sequence]
   (my-function x my-constant-value))

不断返回一个函数,而不是一个seq:
clojure.core/repeat([x][nx])返回一个懒惰的(无限的!或长度n,如果提供的话)xs序列。