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

Haskell中能否定义函数定义类以消除重复的函数定义模式?

完全可以通过高阶函数抽象公共的函数定义模式,彻底消除你提到的重复模板代码。

你示例中所有h类函数的公共逻辑是:接收一个二元组参数,当第二个参数为0时调用处理边界场景的单参数函数,其他场景调用处理通用逻辑的二元参数函数。你可以把这部分公共逻辑抽成一个高阶工厂函数:

-- 公共模式抽象:接收边界处理函数f、通用处理函数g,返回符合模式的目标函数
makeH :: (Integer -> Integer) -> ((Integer, Integer) -> Integer) -> (Integer, Integer) -> Integer
makeH f _ (x, 0) = f x
makeH _ g (x, n) = g (x, n)

之后生成h1/h2/h3只需要传入对应的f和g即可,不需要再重复写类型声明和模式匹配逻辑:

h1 = makeH f1 g1
h2 = makeH f2 g2
h3 = makeH f3 g3

如果需要更高的复用性,还可以把工厂函数的类型泛化,不限制死参数和返回值为Integer,适配更多业务场景:

-- 泛化版本:支持任意类型的第一个参数和返回值
makeH :: (a -> b) -> ((a, Integer) -> b) -> (a, Integer) -> b
makeH f _ (x, 0) = f x
makeH _ g (x, n) = g (x, n)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 20:39:02