gpt4 book ai didi

Haskell 理解 fmap

转载 作者:行者123 更新时间:2023-12-02 12:10:14 28 4
gpt4 key购买 nike

有人可以帮助或指导我如何理解以下实现中的 fmap 函数吗?

data Rose a = a :> [Rose a] deriving (Eq, Show)
instance Functor Rose where
fmap f (x :> xs) = (f x) :> fmap (fmap f) xs

tree :: Rose Int
tree = 1 :> [2:>[]]

我不明白(fmap f)的部分,为什么它又递归了,但它只需要1个参数。这怎么可能,因为需要2.

第二部分是我不明白为什么这不起作用:

fmap f (x :> xs) = (f x) :> fmap f xs

我希望有人能给我一些如何理解这一点的指导。

最佳答案

这是因为xsRose a的列表。

也许这更清楚:

fmap f (x :> xs) = (f x) :> map (fmap f) xs
^^^

当然,对于列表,map = fmap

即:

  1. f 应用于 x
  2. 对于 xs,将函数 fmap f 映射到列表 xs

关于Haskell 理解 fmap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32797315/

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