One*_*ror 0 haskell functional-programming
我正在读某个地方的咖喱功能,听起来很混乱.这个例子让我更加困惑.可以说我有一个功能:
power :: (Int, Float) -> Float -- computes the nth power of b
power (n, b) =
if n == 0 then 1.0 else b * power (n-1, b)
Run Code Online (Sandbox Code Playgroud)
现在,我定义另一个函数powerc:: Int -> Float -> Float,使得
powerc n b =
if n == 0 then 1.0 else b * powerc (n-1) b
Run Code Online (Sandbox Code Playgroud)
有人可以向我解释一下这个功能是如何powerc发布的power.
因为powerc现在允许部分应用:
square = powerc 2
Run Code Online (Sandbox Code Playgroud)
顺便说一句,
powerc = curry power
Run Code Online (Sandbox Code Playgroud)
前者是服用的功能Int, Float元组,而后者则是实质上的功能的链每次取一个单个参数,并返回一个函数取下.
也就是说,powerc取一个Int并返回一个带a 并返回a 的函数.FloatFloat
你可以在部分应用中使用它.例如,square = powerc 2或者cube = powerc 3每个都是Float -> Float具有n捕获值的简单函数.
非咖喱功能不能提供这种简单的部分应用.当前导参数是函数行为的一次性配置时,使用部分应用程序是很好的.在尝试重塑要传递给高阶函数的函数时,它也变得特别有用.例如,您可以映射powerc 2(不定义)列表以将它们全部平方.
希望有所帮助!
| 归档时间: |
|
| 查看次数: |
395 次 |
| 最近记录: |