Haskell Isn';t map使用函数和列表返回列表?
这是我演讲中的一个例子,它试图将一个二进制函数应用于两个列表的所有元素对。这个部分使我感到困惑。它是一个值而不是一个函数吗?那么Haskell Isn';t map使用函数和列表返回列表?,haskell,higher-order-functions,map-function,partial-application,Haskell,Higher Order Functions,Map Function,Partial Application,这是我演讲中的一个例子,它试图将一个二进制函数应用于两个列表的所有元素对。这个部分使我感到困惑。它是一个值而不是一个函数吗?那么映射值bs做什么?“部分(f a)让我感到困惑。” 这里发生的事情叫做Haskell,如果您是从命令式语言来到Haskell的,它可能会令人困惑 在Haskell中,所有函数技术上都接受一个值并返回一个值。返回的值可以是另一个函数。大多数程序员的思维捷径是,函数取其定义中的所有值(顺便说一句,术语是“饱和的”)并生成最终值,但即使有这种思维捷径,也有很多时候,像这样,情
映射值bs
做什么?“部分(f a)
让我感到困惑。”
这里发生的事情叫做Haskell,如果您是从命令式语言来到Haskell的,它可能会令人困惑
在Haskell中,所有函数技术上都接受一个值并返回一个值。返回的值可以是另一个函数。大多数程序员的思维捷径是,函数取其定义中的所有值(顺便说一句,术语是“饱和的”)并生成最终值,但即使有这种思维捷径,也有很多时候,像这样,情况并非如此
函数f
是一个二进制函数,(f a)
是部分应用的函数。(fa)的类型:b->c
“那么,映射值bs
做什么?”
函数(map::(a->b)->[a]->[b]
)是标准前奏的一部分。它采用一个简单的函数,并将其应用于列表中的每个元素
让我们把map(fa)bs
分开:
- 将函数应用于列表的每个元素
使用函数(f a)::b->c
应用于f::a->b->c
并返回函数a
b->c
是bs
map2\u列表
- 此函数的结果是
,函数[c]
应用于第一个列表的一个元素,然后应用于第二个列表的每个元素f
f
是a->b->c
类型,因此fa
是b->c
类型的值。哇,明白了&谢谢!
map2_List :: (a -> b -> c) -> [a] -> [b] -> [c]
map2_List f [] _ = []
map2_List f (a:as) bs = map (f a) bs ++ map2_List f as bs