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序列。