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

如何用Haskell生成1,2,1,3,2,1…结构的无限Integer序列

Haskell实现指定无限序列的方案

首先定义题目要求的Sequence类型别名:

type Sequence = [Integer]

核心实现完全贴合你提到的思路,代码非常简洁:

targetSeq :: Sequence
targetSeq = concat [ [n, n-1 .. 1] | n <- [1..] ]

逻辑说明

  • 用[1..]生成无限正整数序列,依托Haskell的惰性求值特性,仅会在需要时计算对应元素,不会有内存溢出问题
  • 对每个正整数n,用[n, n-1 .. 1]生成从n倒序到1的有限子序列
  • 用concat拼接所有子序列,最终得到目标无限序列

等价写法

你也可以根据偏好选择更偏向函数式风格的实现,效果完全一致:

-- concatMap实现版本
targetSeq = concatMap (\n -> [n, n-1 .. 1]) [1..]

-- 列表Monad运算符实现版本
targetSeq = [1..] >>= \n -> [n, n-1 .. 1]

验证方法

可以通过take函数截取前N个元素验证结果是否符合预期:

-- 取前15个元素,输出为 [1,2,1,3,2,1,4,3,2,1,5,4,3,2,1],和样例完全匹配
take 15 targetSeq

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 23:24:04