Está en la página 1de 1

EVALUACIN DE FUNCIONES

DE ADENTRO HACIA AFUERA (VORAZ) CALL-BY-VALUE (LLAMADA POR VALOR)


La llamada por valor (tambin denominada pasar por valor) es la estrategia de evaluacin
ms comn, usada en lenguajes tan diferentes como C y Scheme . En llamada por valor,
se evala la expresin del argumento y el valor resultante se enlaza a la variable
correspondiente en la funcin (frecuentemente copiando el valor en una nueva regin de
memoria). Si la funcin o procedimiento es capaz de asignar valores a sus parmetros,
slo se le asigna su copia local, es decir, cualquier cosa pasada a una llamada de funcin
no cambia en el mbito de la persona que llama cuando la funcin regresa.

La llamada por valor no es una estrategia de evaluacin nica, sino la familia de


estrategias de evaluacin en la que el argumento de una funcin es evaluado antes de
pasar a la funcin. Mientras que muchos lenguajes de programacin (como Common Lisp,
Eiffel y Java) que utilizan call by value evalan los argumentos de la funcin de izquierda
a derecha, algunos evalan funciones y sus argumentos de derecha a izquierda, y otros
(como Scheme, OCaml y C ) dejar la orden no especificada.

DE AFUERA HACIA ADENTRO (LAZY) CALL-BY-NAME (LLAMADA POR NOMBRE)


Call by name es una estrategia de evaluacin en la que los argumentos de una funcin no
se evalan antes de que se llame a la funcin, sino que se sustituyen directamente en el
cuerpo de la funcin (utilizando la sustitucin que evita la captura ) y luego se dejan
evaluar cada vez que aparecen en la funcin funcin. Si no se utiliza un argumento en el
cuerpo de la funcin, el argumento nunca se evala; si se utiliza varias veces, se reevala
cada vez que aparece. (Ver Dispositivo de Jensen .)

La evaluacin de llamada por nombre es ocasionalmente preferible a la evaluacin de


llamada por valor. Si el argumento de una funcin no se utiliza en la funcin, la llamada
por nombre ahorrar tiempo al no evaluar el argumento, mientras que la llamada por valor
lo evaluar independientemente. Si el argumento es un clculo sin terminacin, la ventaja
es enorme. Sin embargo, cuando se utiliza el argumento de funcin, la llamada por
nombre es a menudo ms lenta, requiriendo un mecanismo como un thunk .

Un uso temprano fue ALGOL 60 . Los lenguajes .NET actuales pueden simular la llamada
por nombre utilizando delegados o parmetros de expresin <T>. Este ltimo resulta en
un rbol de sintaxis abstracto dado a la funcin. Eiffel proporciona agentes, que
representan una operacin para ser evaluada cuando sea necesario. Seed7 proporciona
llamada por nombre con parmetros de funcin.

También podría gustarte