- Haskell函数可以接受函数作为参数,并返回函数作为结果
- 当你想通过定义事物的本质来定义计算,而不是定义某些状态或某些循环的变化步骤时,高阶函数就会出现,它是必不可少的
- 高阶函数是解决问题和思考项目的一种非常强大的方式
Currified函数
准确的说,每个Hasekll函数只能接受一个参数,如下
max :: Ord a => a -> a -> a
max 4 5
max :: Ord a => a -> (a -> a)
(max 4) 5
- 空格用来调用函数
- 空格是一种operator,具有最高的优先级
- 可以理解为max接受a并返回一个接受a和返回a的函数
- 通过调用带有较少参数的函数,可以动态地创建部分应用的函数
如下
multThree :: Num a => a -> a -> a -> a
multThree x y z = x * y * z
multTwoWithNine = multThree 9
multWithEighteen = multTwoWithNine 2
中缀函数也可以使用部分应用,只需要用圆括号包围它,并在一侧提供单个参数。这将提供一个接受形参并将其应用于中缀函数缺失一侧的函数,如下
divideByTen :: Floating a => a -> a
divideByTen = (/ 10)
- 一个特殊之处是,(-4)表示负4,如果想要一个减4的函数,需要((-)4)或(subtract 4)