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

如何向Haskell三参数函数优先传递第二个参数?

Haskell中优先传递中间参数的优雅实现

先看你给出的原函数:

minus :: Int -> Int -> Int -> Int
minus x y z = x - y - z

要优先固定y参数(比如固定为10),同时避免显式定义新函数,有两种简洁的写法:

1. 使用Lambda表达式

直接用匿名函数绑定参数,无需命名新函数,在需要的地方直接使用:

-- 直接得到接受x和z的函数
\x z -> minus x 10 z

如果需要复用,也可以简洁绑定:

minusY10 = \x z -> minus x 10 z

2. 使用flip函数结合部分应用

利用flip交换函数前两个参数的特性,结合柯里化实现更优雅的写法:

-- flip minus 会将参数顺序转为 y -> x -> z -> Int
-- 传入10后,得到 x -> z -> Int 的函数,效果等价于 minus x 10 z
minusY10 = flip minus 10

flip的类型是(a -> b -> c) -> b -> a -> c,对于柯里化的三元函数,它会交换最外层的两个参数,刚好满足你优先传递y的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 18:54:52