You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用函数组合实现Haskell的除法向上取整函数

实现方案

你可以直接使用双层函数组合的写法完成点-free(无参数)风格的实现,比 curry/uncurry 的写法简洁很多:

ceilingDiv = (ceiling .) . (/)

原理说明

这种写法的本质是利用了函数组合的嵌套,刚好适配一元函数和二元函数的组合场景:

  • 我们需要把二元函数(/)的计算结果喂给一元函数ceiling,等价于表达式\a b -> ceiling (a / b)
  • 对于任意一元函数f和二元函数g,(f .) . g展开后刚好就是\x y -> f (g x y),完全匹配你的需求
  • 你也可以写成等价的ceilingDiv = (.) ceiling . (/),和上面的写法没有任何功能差异

原有写法问题说明

你尝试的组合写法类型不匹配的原因是:(/)是柯里化的二元函数,传入第一个参数后返回的是一个等待第二个参数的一元函数,而ceiling需要接收一个实数类型的数值作为入参,自然无法直接和函数类型的值组合。

如果你的使用场景是整数参数的向上整除,也可以不用浮点运算避免精度损失,写法为:

ceilingDiv a b = (a + b - 1) `div` b

内容的提问来源于stack exchange,提问作者Isthos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 04:06:03