nat2 :: [(Integer, Integer)] definición

Definir una lista:

nat2::[(Integer, Integer)]

que contiene todos los pares de enteros no negativos ordenados por la relación conocida de la demostración del teorema de Cantor:

(x1,y1) < (x2,y2) <=> x1+y1 < x2+y2 v (x1+y1=x2+y2 ^ x1 < x2)

[^ - significa alternativa]

tal que:

nat2 = [(0,0),(0,1),(1,0),(0,2),(1,1),(2,0),(0,3),(1,2),(2,1),(3,0),...]

Insinuación:

la definición debe caber en una línea y tener menos de 45 caracteres. Observe que la suma de las coordenadas de los puntos que se encuentran en la misma diagonal es constante.

Hice una definición, pero no estoy seguro de si es correcta, ¿podría verificar / reparar / dar consejos?

nat2::[(Integer,Integer)]
nat2=[(a,b-a)|b<-[0...],a<-[0...b]]

EDITAR: CAMBIADO A:

nat2 :: [(Integer,Integer)] 
nat2 = [(a,b-a) | b <- [0..], a <- [0..b]]

con resultado:

Prelude> :load "nat2.hs"
[1 of 1] Compiling Main             ( nat2.hs, interpreted )
Ok, modules loaded: Main.
*Main> take 10 nat2
[(0,0),(0,1),(1,0),(0,2),(1,1),(2,0),(0,3),(1,2),(2,1),(3,0)]

preguntado el 16 de mayo de 11 a las 17:05

El código ni siquiera se compila, por lo que no es correcto. Intente ejecutar su código en ghci antes de preguntarnos si es correcto. -

ahora está funcionando, actualizado en cuestión -

¿Por qué todos estos votos negativos? El OP mostró una pregunta, publicó lo que hizo y pidió ayuda. No veo ninguna razón para votar en contra. Y por cierto, puede formatear algo como código al sangrarlo con cuatro espacios en blanco. Incluso puede anidar cotizaciones y código. (No sabía esto antes;) -

1 Respuestas

Tiene un error de sintaxis (¿intentó ejecutarlo y verificar la salida?)

Prelude> [(a,b-a)|b<-[0...],a<-[0...b]]

<interactive>:1:14:
    A section must be enclosed in parentheses thus: (0 ...)

Porque solo necesitas dos .. en la lista enumeraciones:

Prelude> take 10 [(a,b-a)|b<-[0..],a<-[0..b]]
[(0,0),(0,1),(1,0),(0,2),(1,1),(2,0),(0,3),(1,2),(2,1),(3,0)]    

Parece razonable, pero eres el mejor para juzgar.

contestado el 16 de mayo de 11 a las 21:05

nat2 :: [(Entero, Entero)] nat2 = [(x, sx) | s <- [0 ..], x <- [0..s]] que uno trabaja, llamado con: take 10 nat2 - tom

sí, cometí un error de sintaxis mientras lo escribía aquí ... lo siento. buena ver. actualizado después de la edición en cuestión. - tom

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.