列表上的应用函数

Rui*_*res 6 haskell applicative

我知道以下将是:

[(+2),(+1)]<*>[1,2,3] == [3,4,5,2,3,4]
Run Code Online (Sandbox Code Playgroud)

我也明白这fmap是实现的map.但是我怎么能在脑海里精神上映射这个计算呢?我第一次看到这个,我假设如下:

[(*2),(+1)]<*>[1,2,3] == [4,5,6]
Run Code Online (Sandbox Code Playgroud)

我第二次谈到:[[3,4,5],[2,3,4]].但另一方面又<*>回来了,f b所以我知道这是不可能的.所以我的问题是,有什么理由可以解决这个问题?

Lou*_*man 15

fs <*> xs或多或少[f x | f <- fs, x <- xs].Monads具有Applicative实例

fM <*> xM = do 
  f <- fM
  x <- xM
  return (f x)
Run Code Online (Sandbox Code Playgroud)

它直接对应于列表理解.


Sho*_*hoe 7

要记住这一点,您可能会发现更容易想象<*>成为×(笛卡尔积):

[a, b, c] × [x, y, z] == [a x, a y, a z, b x, b y, ...]
Run Code Online (Sandbox Code Playgroud)

  • 事实上,`(,) &lt;$&gt; xs &lt;*&gt; ys` 产生了一个 `xs × ys` 的表示。 (2认同)