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

如何用列表推导式实现filterTriples函数筛选升序三元组?

用列表推导式实现筛选升序整数三元组的filterTriples函数

你需要实现一个filterTriples函数,接收整数三元组列表,移除其中不符合非严格升序(即a <= b <= c)的三元组,示例如下:

filterTriples [(1,2,3), (6,5,4), (6,6,6)] -- 结果为 [(1,2,3), (6,6,6)]

你已经实现了生成符合条件三元组的函数,但现在需要对已存在的三元组列表进行筛选,而非从头生成。

实现方法

用列表推导式直接对输入列表进行过滤即可,核心是为每个三元组添加a <= b && b <= c的判断条件:

filterTriples :: [(Int, Int, Int)] -> [(Int, Int, Int)]
filterTriples triples = [(a, b, c) | (a, b, c) <- triples, a <= b && b <= c]

逻辑说明

  • 列表推导式中,(a, b, c) <- triples遍历输入列表中的每个三元组,将其解构为三个整数a、b、c
  • 后面的a <= b && b <= c是过滤条件,只有满足非严格升序的三元组才会被保留到结果列表中

和你现有生成函数的区别

你之前的filterTriplets函数是从[1..n]的范围内生成同时满足升序条件的三元组,而现在的filterTriples是对已有的三元组列表进行筛选,两者逻辑相似但处理对象不同:

  • 生成函数:[(a,b,c) | a <- [1..n], b <- [1..n], c <- [1..n], a<=b && b<=c]
  • 筛选函数:[(a,b,c) | (a,b,c) <- triples, a<=b && b<=c]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 04:01:44