使用列表解析将元组列表转换为其元素列表

Mar*_*l B 3 haskell list-comprehension list

我目前正在为10月份的考试而学习,并且遇到了一个问题,我似乎无法找到一个好的解决方案.

我想读一下这样的整数元组列表:[(1,2),(3,4),(5,6),..]并希望列表理解返回[1,2,3, 4,5,6,...]

以下工作正常,但我希望它在一个列表理解中.

func :: [(Integer, Integer)] -> [Integer]
func xs = concat [ [x,y] | (x,y) <- xs ]
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

Wil*_*sem 7

您可以在列表推导的右侧使用额外的迭代,例如:

func :: [(a, a)] -> [a]
func xs = [ xi | (x1, x2) <- xs, xi <- [x1, x2] ]
Run Code Online (Sandbox Code Playgroud)

所以我们编写列表理解就像人们会在命令式编程语言中编写嵌套循环一样.

  • 我以前见过这个,但无法弄清楚它背后的逻辑.非常感谢,我会用这个来修补一下! (3认同)