Currifed

发布时间 2023-04-11 07:43:42作者: 牧羊龟
  • 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)