部分申请 - 第 2 部分
作为另一个例子,我们有函数 map
,它接受一个函数和一个值列表,并将函数应用于列表的每个值:
map :: (a -> b) -> [a] -> [b]
假设我们想要增加列表中的每个值。你可以决定定义自己的函数,它在其参数中添加一个函数,并在你的列表中添加函数 map
addOne x = plus 1 x
map addOne [1,2,3]
但如果你再看一下 addOne
的定义,加上括号来强调:
(addOne) x = ((plus) 1) x
当应用于任何值 x
时,函数 addOne
与应用于 x
的部分应用函数 plus 1
相同。这意味着函数 addOne
和 plus 1
是相同的,我们可以通过用 plus 1
替换 addOne
来避免定义新函数,记住使用括号将 plus 1
作为子表达式隔离:
map (plus 1) [1,2,3]