Ordenación de los pares de enteros
Los pares de números enteros se pueden ordenar por la suma de los valores absolutos de sus componentes. Los primeros pares en dicha ordenación son
(0,0), (-1,0),(0,-1),(0,1),(1,0), (-2,0),(-1,-1),(-1,1),(0,-2),(0,2),(1,-1),(1,1),(2,0), ...
Definir la lista
pares :: [(Integer, Integer)]
cuyos elementos son los pares de números enteros con la ordenación anterior. Por ejemplo,
λ> take 38 pares [(0,0),(-1,0),(0,-1),(0,1),(1,0),(-2,0),(-1,-1),(-1,1),(0,-2), (0,2),(1,-1),(1,1),(2,0),(-3,0),(-2,-1),(-2,1),(-1,-2),(-1,2), (0,-3),(0,3),(1,-2),(1,2),(2,-1),(2,1),(3,0),(-4,0),(-3,-1), (-3,1),(-2,-2),(-2,2),(-1,-3),(-1,3),(0,-4),(0,4),(1,-3),(1,3), (2,-2),(2,2)]
Soluciones
import Data.List (sort) pares :: [(Integer, Integer)] pares = concat [sort (concat [aux (x,n-x) | x <- [0..n]]) | n <- [0..]] where aux (0,0) = [(0,0)] aux (0,y) = [(0,y), (0,-y)] aux (x,0) = [(x,0), (-x,0)] aux (x,y) = [(x,y), (-x,y), (x,-y), (-x,-y)]