gpt4 book ai didi

haskell - 第二个参数如何变成函数列表?

转载 作者:行者123 更新时间:2023-12-04 16:26:53 24 4
gpt4 key购买 nike

我在玩 zipWith并遇到以下情况:

Prelude Control.Applicative> :t zipWith id
zipWith id :: [b -> c] -> [b] -> [c]

为什么编译器期望下一个参数是函数列表?

我试图分析,但无法得出结论,为什么下一个参数必须是函数列表。

当我通过时,签名是如何申请的 idzipWith ?

最佳答案

zipWith的类型是:

zipWith :: (a -> b -> c) -> [a] -> [b] -> [c]

id的类型是:
id :: d -> d

所以如果我们现在想要派生 zipWith id 的类型,我们推送的类型是 id :: d -> d进入 zipWith的第一个参数的类型:
  d -> d
~ a -> (b -> c)

所以这意味着: a ~ da ~ b -> c .所以这意味着 zipWith id 的类型就是现在:
   zipWith id :: [a] -> [b] -> [c]
-> zipWith id :: [b -> c] -> [b] -> [c]

这是如何工作的:第一个列表必须包含一个函数列表 f :: b -> c ,以及第二个列表,一个元素列表 x :: b ,从而计算出一个元素列表 f x :: c .

例如:
Prelude> zipWith id [(+1),(5/),(3*),(3-)] [1,4,2,5]
[2.0,1.25,6.0,-2.0]

1+12.0 , 5/41.25 , 3*26.03-5-2.0 .

所以 zipWith id将采用两个元素 fx , 并申请 id f x关于这些,或更详细的 (id f) x .自 id ff ,它将因此计算 f x .

因此我们可以得出结论 zipWith是元素映射。

关于haskell - 第二个参数如何变成函数列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45509368/

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