我需要生成所有副本的无限排序列表。 每对中的第一个元素必须小于第二个元素。 排序必须按升序排列 - 通过对元素的总和;如果两个和是相等的,那么通过这个对的第一个元素。生成所有可能的副本的排序列表
所以,在结果列表必须
[(2,3),(2,5),(3,4),(3,5),(2,7),(4,5),(3,7),(2,9),(3,8),(4,7)...`
这里是我的解决方案。
coprimes :: [(Int, Int)]
coprimes = sortBy (\t1 t2 -> if uncurry (+) t1 <= uncurry (+) t2 then LT else GT) $ helper [2..]
where helper xs = [(x,y) | x <- xs, y <- xs, x < y, gcd x y == 1]
问题是,我不能采取n
第一对。我意识到排序不能在无限列表上完成。
但是我怎样才能以懒惰的方式生成相同的序列?
这个技巧可能是为'2'生成对,'3'为升序并*合并*它们。 – Bakuriu