functional-programming - 函数式编程 : Are maps sequential? 对闭包的影响

标签 functional-programming closures julia higher-order-functions

我将用 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/

相关文章:

powershell - 在PowerShell中将函数(带有参数)作为参数传递

c# - C# 中的闭包 lambda 表达式

sorting - Julia 中的高效部分排列排序

matrix - Julia 矩阵切片

javascript - 嵌套函数可以访问它们的范围 "above"...但是它们在哪里定义有关系吗?

matrix - 使用 Julia 计算网格中点的矩阵表达式

java - Lambda + stream 将 List<A> 提取到单个列表

haskell - Haskell 或函数式语言的代理?

javascript - 在 Javascript 中,为什么我不能用 f(f) 替换 x => f(f)(x) ?

php - 在 PHP 中执行纯匿名函数