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

Haskell列表生成器:如何生成对应大小写字母对且不使用加法函数?

解决方案

当然可以,这里有几种简洁的实现方式,全程不需要用到加法函数:

1. 直接使用zip函数(推荐)

Haskell的zip函数本身就是用来将两个列表对应位置的元素配对的,刚好小写字母序列['a'..'z']和大写字母序列['A'..'Z']长度完全一致,直接传入zip就能得到你要的结果:

zip ['a'..'z'] ['A'..'Z']

运行后会生成[('a','A'), ('b','B'), ..., ('z','Z')]的目标列表。

2. 用列表推导式结合索引配对

如果一定要用列表推导式的形式,可以通过zip给小写字母绑定索引,再通过索引取对应位置的大写字母:

[(x, upper !! i) | (x, i) <- zip ['a'..'z'] [0..], let upper = ['A'..'Z']]

这里zip ['a'..'z'] [0..]会生成带索引的元组(比如('a',0), ('b',1)...),再通过!!操作符取出大写字母列表对应索引的元素,同样满足“不使用加法函数”的要求。

如果不想用!!操作符,也可以通过索引匹配的方式写列表推导:

[(x, y) | (x, i) <- zip ['a'..'z'] [0..], (y, j) <- zip ['A'..'Z'] [0..], i == j]

不过这种写法效率不如前两种,仅作为思路补充。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 02:15:44