Haskell中的Foldr和Foldl函数

Himanshu Saini

Haskell编程中有折叠功能的代码。

map' ::(a->b)->[a]->[b]
map' f xs=foldr(\x acc ->f x:acc)[] xs

输入:

map' (+3) [1,2,3]

输出:

[4,5,6]

由于使用了foldr函数,它从右侧获取了元素,我想从左侧获取该元素并追加到列表中,并且我想要一个输出[6,5,4]。我通过foldl函数完成了它,但是它给出了错误。

ERROR: Couldn't match expected type `a' with actual type `[b]'
      `a' is a rigid type variable bound by
          the type signature for map' :: (a -> b) -> [a] -> [b]
          at doubleme.hs:1:8
    In the first argument of `f', namely `x'
    In the first argument of `(:)', namely `f x'
    In the expression: f x : acc
shree.pat18

将函数签名更改为map' ::(a->b)->[a]->[b]

map操作基本上采用一个函数,该函数将类型为“ a”的元素转换为类型为“ b”的元素,并将其列表转换为类型“ a”的元素,以使用转换函数生成类型为“ b”的元素列表。您的函数签名包含另一种类型“ c”与此相反,因为不能隐式假定“ b”和“ c”是同一类型。

接下来,要使用foldl,您必须反转输入参数的顺序,如下所示:

map' :: (a->b)->[a]->[b]
map' f xs = foldl (\acc x ->f x:acc) [] xs

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Haskell,Foldr和foldl

来自分类Dev

Haskell中的`foldl`和`foldr`的数值问题

来自分类Dev

DrRacket中的Foldr和Foldl

来自分类Dev

Haskell中使用foldl或foldr的map函数

来自分类Dev

Haskell Foldl与foldr的实现

来自分类Dev

Haskell Foldl与foldr的实现

来自分类Dev

Haskell转换函数以使用foldr或foldl

来自分类Dev

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

来自分类Dev

使用 foldl 或 foldr 返回列表中两个元素首次出现之间的整数距离的间隙函数。(Haskell)

来自分类Dev

在foldl函数Haskell中添加Writer Monad

来自分类Dev

为什么在Haskell中可以使用foldl而不是foldr来反向列出

来自分类Dev

为什么foldr可以在Haskell中的无限列表上工作,而foldl却不能呢?

来自分类Dev

了解实现foldr和foldl的功能

来自分类Dev

球拍中的foldl1和foldr1在哪里?

来自分类Dev

我对 haskell 中函数 `foldr` 的类型感到困惑

来自分类Dev

如何在foldl函数Haskell中记录操作?

来自分类Dev

Haskell-使用foldr / foldl对列表列表求和

来自分类Dev

带乘法运算符的标准ML Foldl / Foldr函数?

来自分类Dev

使用foldr构建foldl

来自分类Dev

Haskell——试图让我的 foldl 函数工作

来自分类Dev

Haskell中foldr vs foldr1的用法

来自分类Dev

使用map和foldr,haskell实现功能

来自分类Dev

适用于foldr的lambda函数中与Haskell相关的独立变量

来自分类Dev

foldr函数的返回值是什么(在Haskell中),它得到的参数是什么?

来自分类Dev

foldl / foldr不要达到stackoverflow

来自分类Dev

为什么sum比haskell中的foldl'慢?

来自分类Dev

Haskell中的函数防护和“ where”语法

来自分类Dev

Haskell中的函数防护和“ where”语法

来自分类Dev

haskell和函数声明中的打印问题

Related 相关文章

热门标签

归档