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