【发布时间】:2019-06-03 08:06:13
【问题描述】:
我正在尝试学习 Haskell 和理解列表,但找不到解决方案:
mylist = [x*y | x <- [1..], y <- [1..]]
经过我的试验,结果是这样的
mylist = [1,2,3,4,5,...]
因为在列表推导中,x 取值1,然后y 反复更改值。
但我的目标是完成一个不同的任务,以便得到以下结果:
mylist = [1,2,2,4,3,3,6.....]
我的意思是我希望组合混合而不是分开,因为我有一个严重的问题来获得合适的结果。
我会举一个更具体的例子。
我想要一个包含这种形式的所有数字的列表:
num = 2^x * 3^y
x 和 y 必须采用所有值 >= 0。
我的方法如下:
powers = [2^x * 3^y | x <- [0..], y <- [0..]]
但是这样我只取 3 的幂,因为 x 一直是 0。
我试过这个
multiples = nub (merge (<=) powers2 powers3)
powers3 = [2^x * 3^y | x <- [0..], y <- [0..]]
powers2 = [2^x * 3^y | y <- [0..], x <- [0..]]
以便合并不同的值,但同样,值 6,12 等。丢失了 - 结果是这样的:
mylist = [1,2,3,4,8,9,16,27,32,64,81...]
【问题讨论】:
-
所以只是订购问题?我想知道
[x*y | (x,y) <- zip [1..] [1..]]是否可行?嗯,是的,不,这实际上是同时发生的。实际上很有趣的问题。 -
@BartekBanachewicz 只需在
sort前面加上有限列表即可。 -
如果您将所有值
x, y排列在二维网格上,您能否显示您打算遍历它们的路径? -
powers3=[2^x*3^y | 怎么样? x
-
@mkrieger1 简单的递增顺序。您可能的意思是合并,而不是合并排序。 @ Jam-aica 是的,它可以做到。有一个包数据排序列表;并且我添加的两个标签有许多高度相关的条目。 :)
标签: haskell list-comprehension infinite hamming-numbers smooth-numbers