我需要生成所有副本的無限排序列表。 每對中的第一個元素必須小於第二個元素。 排序必須按升序排列 - 通過對元素的總和;如果兩個和是相等的,那麼通過這個對的第一個元素。生成所有可能的副本的排序列表
所以,在結果列表必須
[(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