Escribí lo siguiente en ghci, pensando que sucedería una de dos cosas: 1) El intérprete se bloqueaba, buscando en cada miembro de una lista infinita las coincidencias con un predicado; o 2) a través de las cortinas Haskell Jujitsu, el intérprete de alguna manera descubriría que la secuencia termina en 4 y se detiene allí.Comprensión finita de una lista infinita
[x | x <- [1..],5>x]
Resultado 1 fue lo que sucedió. Ahora, el resultado 2 era mucho pedir. Pero dado que un humano puede probar que la secuencia termina en 4, ¿podría haber alguna manera de lograr que el intérprete lo haga? ¿Podría ser reescrito de tal manera que termine? De hecho, ¿hay alguna vez un predicado que hace una comprensión finita de una lista infinita?
'takeWhile (<5) [1 ..]' – m09
@Mog: Si bien estoy de acuerdo con usted en su comentario, ¿no es una trampa ya que de alguna manera ha cambiado el significado de la comprensión? –
La capacidad de un ser humano para probar algo acerca de un programa no siempre es algo que un programa automático pueda imitar: usted puede razonar que un programa específico puede terminar, pero en general no es posible calcularlo (es el problema de detención, que es indecidible). Y puede escribir cualquier código que desee en una lista de comprensión, así que creo que en el caso general al compilador le resultará muy difícil razonar acerca de su lista de comprensiones. – gfour