gpt4 book ai didi

haskell - 了解 Lambda 函数和 foldl 在 Haskell 中的工作方式

转载 作者:行者123 更新时间:2023-12-04 14:30:36 24 4
gpt4 key购买 nike

我目前正在学习 Haskell,我遇到的与其说是一个问题,不如说是一个困惑点。我正在看电子书中的例子“向你学习 Haskell”。 ( http://learnyouahaskell.com/higher-order-functions ) 还有一个我不太明白的 lambda 函数和 foldl 的例子。因此,在示例中,重新创建反向函数的代码如下:

reverse' :: [a] -> [a]  
reverse' = foldl (\acc x -> x : acc) []

我已经编译并成功运行了。但是我不明白为什么你不需要像这样指定列表的来源:

reverse' :: [a] -> [a]  
reverse' e = foldl (\acc x -> x : acc) [] e

(其中 e 是来自用户输入的列表 [a])。

有人能解释一下吗,或者给我指点一下解释它的文档?谢谢:)

最佳答案

它叫做 η-reduction : 在 lambda 演算中(因此在 Haskell 中)你可以用简单的 f 替换 \x -> f x。结合函数定义实际上是语法糖的事实:

g x = f x

是糖

g = \x -> f x

就是这样

g = f

应用于您的示例,

reverse' e = foldl (\acc x -> x : acc) [] e

reverse' = \e -> foldl (\acc x -> x : acc) [] e

reverse' = foldl (\acc x -> x : acc) []

这种省略仅传递给其他函数的函数参数的想法称为 point-free style .它在 Haskell 中经常使用,可以使您的代码更加简洁,有时还可以揭示更一般的数学结构。然而,它也可能使您的代码有些神秘(贬义词:毫无意义的风格)。

关于haskell - 了解 Lambda 函数和 foldl 在 Haskell 中的工作方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34982790/

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