对我来说,Closure是一个(嵌套?)函数,具有共同定位的数据.
当您在Haskell中编写软件并在之后查看它时,您经常会发现无意中创建的闭包.
我不太适合自己.在什么情况下我会故意想要编码闭包?毕竟,在所有的例子中,我发现共同定位数据的数量是微不足道的,因此在我看来并不像在实践中那样可以证明他们(有意)的创造是合理的.是否有任何Haskell模块可以帮助我有意创建闭包并将其存储在地图中?
dfl*_*str 29
在Haskell中,函数是语言的重要组成部分,主要是因为Haskell基于Lambda微积分.
在Lambda微积分中,有些函数具有"自由变量",这意味着它们使用未作为直接参数传递给它们的变量.具有自由变量的函数在这种情况下称为"闭包".
因为具有自由变量的函数在LC中非常常见,所以它们也构成了Haskell语言的组成部分.例如,当你写这个:
f a b c = a * b + c
Run Code Online (Sandbox Code Playgroud)
...你也可以写这个,结果完全相同:
f a b = \ c -> a * b + c
Run Code Online (Sandbox Code Playgroud)
... 甚至:
f a b = let product = a * b in \ c -> product + c
Run Code Online (Sandbox Code Playgroud)
...进一步的等效变化:
f a = \ b -> let product = a * b in \ c -> product + c
Run Code Online (Sandbox Code Playgroud)
这是因为Haskell实际上在任何地方都创建了带有自由变量的函数,因此,一直在创建闭包.其中一些可能会被编译器优化掉,但可以安全地假设使用的闭包比你自己能够发现的更多.
所以,不要试图找到闭包; 它们在Haskell中并不特别,并且一直在使用.
| 归档时间: |
|
| 查看次数: |
6491 次 |
| 最近记录: |