Me encontré con un ejercicio en una de mis conferencias que me dejó confundido en la salida de [2, 2 .. 2]. Por qué al ingresar [2, 2 .. 2] genera una lista "infinita" con 2's.Haskell notación de rango para generar una lista. Resultado inesperado
La forma en que entendí la notación fue que el primer elemento es el límite de inicio, el segundo el "espacio" entre los números, y el último es el final de la lista, es decir, se detiene al llegar a ese número.
Si mi razonamiento es correcto, ¿por qué la expresión [2, 2 .. 2] no muestra [2]?.
Pensé que Haskell podría evaluarlo de esta manera;
- Cuando se imprime el primer elemento de la lista es igual a la pasado, por lo tanto, detener.
- O, si el primer elemento no se compara con el límite "externo", la salida sería [2, 2] porque al agregar cero al número anterior (en el caso del inicio 2) habría llegado al final y, por lo tanto, se detendría.
que, obviamente, no comprender el funcionamiento de la notación correctamente, así que ¿cómo se evalúa la expresión Haskell?
@ Robert Harvey, tengo curiosidad por qué revirtió las etiquetas. Esa notación es más conocida como notación de rango, y 'punto-dot-notación' era una nueva etiqueta. Puedo ver un posible razonamiento para volver a agregar la etiqueta 'dot-dot-notación', pero no puedo entender por qué eliminaría la etiqueta' range'. – luqui
@luqui: 'range' puede significar cualquier cosa.Cambié la etiqueta a 'range-notation' y agregué una etiqueta wiki. –