gpt4 book ai didi

function - map map vs map.map

转载 作者:行者123 更新时间:2023-12-04 17:06:21 29 4
gpt4 key购买 nike

我是 Haskell 的新手,我认为函数 map mapmap.map在 Haskell 中是一样的。
我的终端给了我两种不同的类型,

(map.map) :: (a -> b) ->  [[a]]  ->  [[b]]


(map map) :: [a -> b] -> [[a] -> [b]]

这些函数在语法方面有何不同,每个函数的确切含义是什么?

最佳答案

map map表达式将花费第二个 map作为第一个的参数。所以这意味着如果我们派生类型,我们会看到:

map :: (  a     ->      b     ) -> ([a] -> [b])
map :: (c -> d) -> ([c] -> [d])
-----------------------------------------------
a ~ (c -> d), b ~ [c] -> [d]

因此,这意味着 ac -> d 的类型相同, 和 b[c] -> [d] 的类型相同.因此,这意味着 map map 的类型是:
map map :: [a] -> [b]
:: [c -> d] -> [[c] -> [d]]

这里 map map因此将类型为 c -> d 的函数列表作为参数。 ,它将生成一个函数列表,这些函数执行与这些函数的映射。

这意味着,如果你写:
(map map) [(+1), (*2), (-3)]

你检索类似的东西:
[map (+1), map (*2), map (-3)]
map . map 的情况并非如此.此表达式等效于 (.) map map . (.) :: (b -> c) -> (a -> b) -> a -> c function 需要两个函数 fg ,并将这些组合为 \x -> f (g x) .因此,该类型意味着:
(.) :: (  b     ->      c     ) -> ((  a     ->      b     ) -> (a -> c))
map :: (d -> e) -> ([d] -> [e])
map :: (f -> g) -> ([f] -> [g])
-------------------------------------------------------------------------
b ~ d -> e ~ [f] -> [g], c ~ [d] -> [e], a ~ f -> g, d ~ f, e ~ g
(.) map map的类型是这样的:
(.) map map :: a -> c
:: (f -> g) -> ([d] -> [e])
:: (f -> g) -> ([[f]] -> [[g]])

此函数采用 f -> g 类型的单个函数, 并将生成一个函数,该函数接受 f 的列表s,它可以将这些映射到 g s。

所以 (map . map) (+1)将生成一个函数,以便:
(map . map) (+1) [[1,4,2,5],[1,3,0,2]]

它将生成:
[[2,5,3,6], [2,4,1,3]]

关于function - map map vs map.map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57458890/

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