簡體   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