Мне нужно генерировать бесконечный отсортированный список всех взаимных ошибок. Первый элемент в каждой паре должен быть меньше второго. Сортировка должна выполняться в порядке возрастания - суммой элементов пары; и если две суммы равны, то по первому элементу пары.Создание отсортированного списка всех возможных совпадений
Таким образом, результирующий список должен быть
[(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