2010-05-30 13 views

Respuesta

7

La pereza significa que una función no se evalúa realmente hasta que se utiliza (o a menos que) su valor de retorno. Esto significa que las llamadas a funciones no necesariamente se evalúan en el orden en que aparecen en el código. También significa que no puede haber funciones vacías porque nunca se evaluarían (ya que no es posible usar un valor de retorno que no existe).

Sin embargo, para las funciones que realizan efectos secundarios (como la mutación, pero también solo para imprimir en la pantalla) sí importa en qué orden se ejecutan. Importa aún más que sean ejecutados en absoluto. Esto significa que los lenguajes perezosos necesitan una forma de emular los efectos secundarios en tipos especiales que garanticen que se ejecuten y ejecuten en el orden correcto.

Dado que los programas totalmente libres de efectos secundarios son inútiles (debe poder imprimir en la pantalla), los lenguajes perezosos en realidad soportan efectos secundarios. Simplemente los encapsulan con la mónada IO o los tipos de singularidad. Como ejemplo, haskell tiene matrices mutables, pero solo se pueden usar dentro de la mónada IO.

+0

Para decirlo de otra manera: no es que los lenguajes perezosos * no pueden * tener una mutación, es que usted no quiere * * eso. –

+0

gracias por la respuesta – forellana

+0

Mientras que los programas interactivos requieren efectos secundarios, los programas no interactivos pueden ser útiles incluso si son completamente libres de efectos secundarios. Simplemente pueden devolver un resultado a la persona que llama. –

1

Mutación significa que no puede estar seguro del estado del programa en ningún momento y tendrá que preocuparse por los efectos secundarios de cualquier acción. De hecho, lo he pensado y no puedo pensar en ninguna forma de tener un lenguaje completamente perezoso que apoye la mutación. (No soy científico de la computación)

+0

gracias por la respuesta – forellana

Cuestiones relacionadas