Haskell生成增加的对,按元素的总和排序

Cas*_*urr 1 haskell

我是Haskell的新手,我想生成一个看起来像这样的对列表:

[(0,1),(0,2),(0,3),(1,2),(0,4),(1,3),(0,5)....]等等等等.

我创建了一个生成有序对的函数

orderedPairs = [ (x, y) | x <- [0 .. ], y <- [1 ..], x < y]
Run Code Online (Sandbox Code Playgroud)

但我不知道怎么从这里开始.谢谢.:)

Cas*_*urr 5

谢谢你的提示.我设法做到这样:

orderedPairs n = [ (x, y) | x <- [0 .. n], let y = n - x, x < y]
pairStream n = (orderedPairs n) ++ (pairStream (n + 1))
increasingPairs = pairStream 0
Run Code Online (Sandbox Code Playgroud)

拿10个increasePairs返回正确的输出.:)

  • 好的,这是一个非常好的开始.但不是用'x <y`过滤掉列表的一半,而是调整`x`的上限.``[(x,nx)| x < - [0 ..(n-1)```2]]``会这样做.对于`increasePairs`,你可以使用`concat [orderedPairs n | n < - [0 ..]]`或`concatMap orderedPairs [0 ..]`,或``[0 ..] >> = orderedPairs`,我觉得更好. (3认同)