繁体   English   中英

Haskell中的map函数(使用foldr)的解释?

[英]Explanation of map functions (using foldr) in Haskell?

我正在尝试使用 foldr 定义 map function

我找到了以下两个解决方案,但是我不太确定它们是如何工作的。

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

我对 Haskell 和 foldr 很陌生,所以我很难理解第一个解决方案中的((:). f)和第二个解决方案中的(\x xs -> fx: xs)做什么。

我也不明白 foldr 如何处理空列表的情况。

如果我能用外行的方式简单地一步一步地解释这一点,将不胜感激。

(\x xs -> fx: xs)(:). f (:). f意思相同。 它们都是采用两个 arguments 的函数,将f应用于第一个参数,然后将其应用于第二个参数。

那么当给定一个空列表时, foldr会做什么呢? 它只是返回起始值,在这些示例中为[]

这是来自Hackagefoldr的实现:

foldr k z = go
          where
            go []     = z
            go (y:ys) = y `k` go ys

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM