部分申請 - 第 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]