que tienen la siguiente función definida:¿Por qué esta afirmación de Haskell no se evalúa perezosamente?
ex 1 x = 1
ex 0 x = 0
ex b x = b ** x
Entonces, cuando yo haga lo siguiente:
1 `ex` (sum [1..])
que trata de calcular la suma de la secuencia infinita, en lugar de ser perezoso y regresar 1. ¿Por qué?
EDIT: Tras realizar investigaciones adicionales, he encontrado que la pereza ocurre si defino la función ex
en un archivo, pero no si lo defino en GHCi:
$ ghci
GHCi, version 6.8.2: http://www.haskell.org/ghc/ :? for help
Loading package base ... linking ... done.
Prelude> let ex 1 x = 1
Prelude> let ex b x = b ** x
Prelude> ex 1 (sum [1..])
<interactive>: out of memory (requested 1048576 bytes)
Si me tire de la definición ex
en un archivo (en este caso, test.hs):
$ ghci
GHCi, version 6.8.2: http://www.haskell.org/ghc/ :? for help
Loading package base ... linking ... done.
Prelude> :load test.hs
[1 of 1] Compiling Main (test.hs, interpreted)
Ok, modules loaded: Main.
*Main> ex 1 (sum [1..])
1.0
La nueva pregunta, entonces, es ¿por qué?
No, 1 'ex' (suma [1 ..]) devuelve 1.0 en mi computadora. ¿Qué versión de ghc, etc.? ¿Y obtiene el mismo resultado con ex 1 (suma [1 ..])? – ShreevatsaR
Posiblemente un error? –
@ShreevatsaR: buenos puntos, mira mi actualización anterior. – perimosocordiae