用常量映射序列

Hen*_*gon 6 functional-programming constants clojure map sequence

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

(map my-function my-sequence (cycle [my-constant-value]))
Run Code Online (Sandbox Code Playgroud)

其中my-constant-value是一个常量,它意味着对于my-sequence的映射它将是相同的,尽管它本身可能是某些函数的结果.我觉得以后我会看看我在这里问的问题,并认为这是一个愚蠢的问题,因为如果我以不同的方式构建我的代码,这不会是一个问题,但它确实存在!

ama*_*loy 9

我倾向于使用部分或匿名函数,正如dbyrne建议的那样,但另一个需要注意的工具是repeat,它会返回一个无限值的无限序列:

(map + (range 4) (repeat 10))
=> (10 11 12 13)
Run Code Online (Sandbox Code Playgroud)


dby*_*rne 7

在你的情况下,我会使用匿名函数:

(map #(my-function % my-constant-value) my-sequence)
Run Code Online (Sandbox Code Playgroud)

使用部分应用的函数是另一种选择,但在这种特定情况下没有多大意义:

(map (partial my-function my-constant-value) my-sequence)
Run Code Online (Sandbox Code Playgroud)

您(也许?)需要重新定义my-function以将常量值作为第一个参数,并且您不需要接受可变数量的参数,因此使用partial不会为您买任何东西.


Jou*_*nen 5

我发现有时比列表理解宏更具可读性的另一种方式mapfor

(for [x my-sequence]
   (my-function x my-constant-value))
Run Code Online (Sandbox Code Playgroud)