【问题标题】:Map Function using list implementation haskell使用列表实现haskell的映射函数
【发布时间】:2018-04-03 05:53:28
【问题描述】:

有没有办法使用列表实现来编写 Haskell map 函数的实现?

我不断收到错误消息,而且我认为我没有走在正确的轨道上。这就是我所拥有的:

map' :: (a -> b) -> [a] -> [b]
map' _ [] = []
map' xs ys = [ (x, y) | x <- xs | y <- ys ]

任何能引导我朝着正确方向前进的帮助或链接都将不胜感激。

【问题讨论】:

  • 类型签名说map,但实现说zip(带有多余的大小写)。
  • map 的第一个参数是一个函数(根据类型签名)。 map 将函数应用于列表的每个元素,返回结果列表)。您正在从 2 个列表的元素创建对,即 zip

标签: list haskell list-comprehension map-function


【解决方案1】:

注意

map' f xs = [f x | x <- xs]

去糖

map' f xs = do x <- xs
               return $ f x

去糖化

map' f xs = xs >>= return . f

这是众所周知的定义(如果将map' 替换为fmap),用于从Monad 实例定义Functor 实例(从而证明所有monad 也是函子)。

具体来说,它表明列表推导式只是 map 定义在单子运算符方面的伪装版本。

【讨论】:

    【解决方案2】:

    我相信您的意思是“理解”,而不是“实施”。

    无论哪种方式,这都会起作用:

    map' f as = [f a | a <- as]
    map' (* 2) [1..5]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-27
      • 1970-01-01
      • 1970-01-01
      • 2019-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多