当第一个参数使用flip时了解map函数

ceno980

我正在从“了解Haskell带来的好处!”中学习高阶函数。由Miran Lipovaca撰写。我知道flip函数接受一个函数并返回一个像原始函数一样的函数,但是前两个参数被翻转。

我不完全了解带有map函数的以下示例的工作方式。

ghci> map (flip subtract 20) [1,2,3,4]
[19,18,17,16]

Map接受一个函数并将其应用于列表的每个元素,从而生成一个新列表。但是由于函数映射是带参数的翻盖subtract 20 [1,2,3,4],结果函数是20 subtract [1,2,3,4]吗?

我认为这是不正确的,因为只有在您键入时才会生成诸如19的值subtract 1 20我不确定在上面的示例中减法将如何工作以产生输出列表。

威廉·范昂塞姆

不,这里的功能map :: (a -> b) -> [a] -> [b](flip subtract 20),这是您传递给的参数map因此,这意味着:

map (flip subtract 20) [1,2,3,4]

等效于:

[flip subtract 20 1, flip subtract 20 2, flip subtract 20 3, flip subtract 20 4]

flip :: (a -> b -> c) -> b -> a -> c是一个接受一个函数并翻转参数的函数。因此flip subtract 20在语义上等同于\x -> subtract x 20因此,我们的列表等效于:

[subtract 1 20, subtract 2 20, subtract 3 20, subtract 4 20]

subtract :: Num a => a -> a -> a是的“翻转”版本(-),因此等效于:

[20 - 1, 20 - 2, 20 - 3, 20 - 4]

因此等效于:

Prelude> map (flip subtract 20) [1,2,3,4]
[19,18,17,16]

因此,上述表达式的缩写是:

map (20 -) [1,2,3,4]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

当iterable不是函数的第一个参数时

Shell函数仅使用第一个参数

Map函数将非函数作为第一个参数

是否有从 map() 箭头函数中删除第一个参数的语法?

在ReactJS中使用Map函数时,如何设置defaultChecked为仅在单选按钮中的第一个输入

PHP:在第一个函数内的另一个函数中使用函数参数吗?

为特定组件创建意图时,何时“ this”不是构造函数的第一个参数?

函数的宏驱动条件第一个参数

改变第一个参数类型的增强函数?

javascript:函数中的可选第一个参数

JS中的文本函数第一个参数(_)

Typescript从函数中删除第一个参数

如何删除函数的第一个参数?

引用当前函数的第一个参数类型

如何获取函数的第一个参数的类型?

fgets函数的第一个参数

在Delphi中使用C#DLL仅使用第一个函数参数

我可以使用成员函数作为EnumWindows的第一个参数吗

正则表达式:查找在函数的第一个参数上使用的属性

此PHP函数中使用的第一个参数$ con是什么?

使用管道时无需输入第一个参数

使用第一个可选参数进行重载

webpack require。确保使用第一个参数

使用xquery函数“ functx:between-inclusive”时,第一个参数是否可能来自2个不同的属性值?

使用reduce函数时返回第一个元素

如何直接在第一个时期使用map函数生成的转换,而不是在每个时期执行map函数?

如何使用map()删除第一个元素

我无法使用第一个函数公式

$ @除了第一个参数