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的映射它将是相同的,尽管它本身可能是某些函数的结果.我觉得以后我会看看我在这里问的问题,并认为这是一个愚蠢的问题,因为如果我以不同的方式构建我的代码,这不会是一个问题,但它确实存在!
我倾向于使用部分或匿名函数,正如dbyrne建议的那样,但另一个需要注意的工具是repeat,它会返回一个无限值的无限序列:
(map + (range 4) (repeat 10))
=> (10 11 12 13)
Run Code Online (Sandbox Code Playgroud)
在你的情况下,我会使用匿名函数:
(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不会为您买任何东西.
我发现有时比列表理解宏更具可读性的另一种方式map是for:
(for [x my-sequence]
(my-function x my-constant-value))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
304 次 |
| 最近记录: |