gpt4 book ai didi

haskell - 闭包(在 Haskell 中)

转载 作者:行者123 更新时间:2023-12-03 21:15:05 26 4
gpt4 key购买 nike

对我来说,闭包是一个(嵌套?)具有共同定位数据的函数。

当您在 Haskell 中编写软件并在之后查看时,您经常会发现您无意中创建的闭包。

我并不完全适合自己。在什么情况下我会故意编写闭包代码?毕竟,在所有示例中,我发现位于同一位置的数据量很小/很小,因此在我看来,在实践中似乎并不能证明他们的(有意)创建是合理的。是否有任何 Haskell 模块可以支持我故意创建闭包,例如将它们存储在 map 中?

最佳答案

在 Haskell 中,函数是语言的重要组成部分,主要是因为 Haskell 基于 Lambda Calculus .

在 Lambda 演算中,有些函数具有“自由变量”,这意味着它们使用未作为直接参数传递给它们的变量。在这种情况下,具有自由变量的函数就是您所说的“闭包”。

因为带有自由变量的函数在 LC 中很常见,它们也构成了 Haskell 语言的一个组成部分。例如,当您编写此代码时:

f a b c = a * b + c

...你也可以写这个,结果完全相同:
f a b = \ c -> a * b + c

... 甚至:
f a b = let product = a * b in \ c -> product + c

...进一步等效更改:
f a = \ b -> let product = a * b in \ c -> product + c

这是因为 Haskell 本质上创建了到处都有自由变量的函数,因此,闭包一直在创建。其中一些可能会被编译器优化掉,但可以肯定的是,使用的闭包比你自己发现的要多。

所以,不要试图定位闭包;它们在 Haskell 中没有什么特别之处,并且一直在使用。

关于haskell - 闭包(在 Haskell 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9088295/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com