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

Haskell中zip替代方案:如何修改函数返回三元组列表?

解决方案:扩展Haskell函数返回三元组列表

嗨,这个问题其实很好解决,Haskell里有几种简洁的方式来实现你想要的效果——把原来的二元组列表扩展成带输入字符串的三元组列表。我给你列几个常用的实现方法:

方法1:使用zip3直接打包三个列表

Haskell标准库提供了zip3函数,它可以把三个列表对应位置的元素打包成三元组的列表,刚好满足你的需求。我们只需要生成一个和x、y长度相同,每个元素都是输入s的列表,这里用repeat s就很方便(zip3会自动取三个列表中最短的长度,而你的x和y来自同一个s,长度应该是一致的):

f :: String -> [(Int, Int, String)]
f s = zip3 x y (repeat s)
  where
    x = g s
    y = h s

方法2:基于原有zip结果扩展三元组

如果你更习惯用原来的zip逻辑,也可以先得到二元组列表,再通过map给每个二元组加上输入字符串s:

f :: String -> [(Int, Int, String)]
f s = map (\(a, b) -> (a, b, s)) (zip x y)
  where
    x = g s
    y = h s

方法3:用列表推导式直观实现

列表推导式在处理这类元素转换时可读性很高,直接遍历zip生成的二元组,每个元素都带上s即可:

f :: String -> [(Int, Int, String)]
f s = [(a, b, s) | (a, b) <- zip (g s) (h s)]

注意事项

这几种方法都依赖一个前提:g s和h s返回的列表长度相同——这也是你原来使用zip的必要条件,所以不需要额外调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 15:57:47