我将用 Julia 来说明:
假设我有一个函数 counter() 是一个闭包。
function mycl()
state=0
function counter()
state=state+1
end
end
现在假设我创建了函数 mycoutner:
mycounter=mycl()
现在将此函数映射到长度为 10 的数组上,所有元素均为 1。
map(x->x+mycounter(),ones(1:10))
输出如下:
julia> map(x->x+mycounter(),ones(1:10))
10-element Array{Int64,1}:
2
3
4
5
6
7
8
9
10
11
看来该函数是按顺序应用于要映射的数组的。
最终我试图避免 for 循环,但是对于闭包变异状态的局部状态变量,我需要按顺序应用它。好像是这样,这是采用的标准吗? (尚未使用 *apply 测试等效的 R 版本)。这真的是“功能性的”,因为局部状态变量正在发生变化?
最佳答案
map
的当前 Julia 实现确实按顺序将其函数参数应用于其集合参数,尽管这不是明确记录的功能。将来,当多线程成为非实验性语言功能时,评估顺序可能会发生变化,但这不会在没有警告的情况下发生。也有可能不是通过改变 map
的行为而发生的。 ,但可以作为选择加入功能 - 例如通过 tmap
对于“线程映射”——或者作为一种优化,在编译器知道被映射的函数是纯函数的情况下。
关于functional-programming - 函数式编程 : Are maps sequential? 对闭包的影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38515247/