如果我需要为我映射到序列项的函数提供一个常量值,是否有比我目前正在做的更好的方法:
(map my-function my-sequence (cycle [my-constant-value]))
其中my-constant-value是一个常量,因为它对于my-sequence的映射来说是相同的,尽管它本身可能是某些函数的结果。我觉得以后我会看看我在这里问的问题,并认为这是一个愚蠢的问题,因为如果我以不同的方式构建我的代码,这不会是一个问题,但它确实存在!
答案 0 :(得分:9)
我倾向于使用部分或匿名函数,因为dbyrne建议,但另一个需要注意的工具是repeat
,它返回一个无限值的无限序列:
(map + (range 4) (repeat 10))
=> (10 11 12 13)
答案 1 :(得分:7)
在你的情况下,我会使用匿名函数:
(map #(my-function % my-constant-value) my-sequence)
使用部分应用的函数是另一种选择,但在这种特定情况下没有多大意义:
(map (partial my-function my-constant-value) my-sequence)
你会(可能吗?)需要重新定义my-function以将常量值作为第一个参数,并且你不需要接受可变数量的参数,因此使用partial
不会买你什么。
答案 2 :(得分:4)
我发现有时候比map
更具可读性的另一种方式是for
列表理解宏:
(for [x my-sequence]
(my-function x my-constant-value))
答案 3 :(得分:1)
是的:)来自api的"other useful functions"部分的一个小宝石constantly
(映射my-function my-sequence(常量my-constant-value))
(map compines-data something-new a-constant)的模式在idomatic clojure中相当常见。它的相对快速也与分块序列等有关。
编辑:这个答案是错误的,但是constantly
和其他“其他有用的功能”api非常酷,我想把这里的引用留给他们。