【问题标题】:Haskell Curried Map哈斯克尔咖喱地图
【发布时间】:2018-07-31 02:06:32
【问题描述】:

所以我知道你可以:

> f = map (+1)
> f [1,2,3]
[2,3,4]

但是,如果你这样做:

> g = map (+) [1,2,3]
> :t g
g :: Num a => [a -> a]

我不知道如何使用 g。它的输入输出是什么?

【问题讨论】:

  • 这个问题是基于一个错误的假设。没有输入或输出; g 不是函数。
  • [a -> a] 正是它所说的 - 函数列表。

标签: haskell functional-programming


【解决方案1】:

例如,可以将列表的每个元素应用于特定值:

> map (\f -> f 3) g
[4,5,6]

或者您可以将列表中的每个函数应用于另一个列表相应位置的值:

> zipWith (\f x -> f x) g [30,300,3000]
[31,302,3003]

或者您可以在列表上进行模式匹配,或者在列表推导中使用它,或者使用(!!) 对其进行索引,或者,或者,或者......有无限的可能性。

【讨论】:

    【解决方案2】:

    (+) :: Num a => a -> a -> a;它接受一个数字并返回一个增加其参数的函数。

    map (+) [1, 2, 3] 等价于[(+ 1), (+ 2), (+ 3)]。使用此类函数列表的一种方法是使用[]Applicative 实例,它允许您将列表中的每个函数应用于另一个列表中的每个值。例如:

    [(+ 1), (+ 2), (+ 3)] <*> [5] == [6, 7, 8]
    

    【讨论】:

      猜你喜欢
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多