2010-07-25 23 views
8

En mis principios de clase de programación estamos hablando de diferentes métodos de llamada. Algunos discutimos fueron:Ejemplo de llamada por nombre

  • llamada por valor
  • llamadas por referencia
  • llamada por valor/resultado
  • y llamada por nombre

no puedo encontrar un ejemplo de cómo funciona la llamada por nombre. ¿Alguien me quiere dar un ejemplo? Creo que cuando tomas un archivo xml como entrada, esto es similar para llamar por nombre. ¿Podría alguien darme un ejemplo más tradicional?

+0

no sé de ningún ejemplos modernos de llamada por nombre. Fue una muy mala idea en ALGOL 60, y dudo que haya cambiado. –

+0

¿Qué tipo de ejemplo estás buscando? ¿Un ejemplo de un lenguaje que usa la función de llamar por nombre o un ejemplo de cómo sería la evaluación de una expresión usando la función llamada por nombre? – sepp2k

+1

@ sepp2k, ambos podrían ser útiles. No estoy seguro, pero por lo que he averiguado hasta ahora parece una idea bastante muerta (corríjame si me equivoco) pero está incluida en el material del curso (¿tal vez solo por razones históricas?) – sixtyfootersdude

Respuesta

9

Trabajaré en un lenguaje de programación hipotético. Supongamos que tenemos una función p(x) que imprime x y luego la devuelve. Ahora vamos a definir una función:

function foo(x, y) { return y+1; } 

Ahora vamos a llamarlo con algunos argumentos:

foo(p(123),p(456)) 

x y y van a ser sustituidos por los parámetros, por lo que la llamada a foo anterior se va a resultar en:

return p(456)+1; 

así que vamos a imprimir 456 a la pantalla y volver 457. en otra estrategia de evaluación, nos Evalu comió primero los parámetros de función (imprimiendo 123 y 456 en la pantalla en el proceso) y luego sustituyó 456 por y en el cuerpo de la función, eventualmente devolviendo 457.

Es artificial, pero espero que entienda la idea. Se trata de la sustitución.

+0

así que llamaría por nombre también llamada llamada por referencia? ¿valor? ¿Algo específico? – sixtyfootersdude

+0

@sixtyfootersdude, esa frase hizo daño a mi cerebro. Cuidado para volver a establecerlo? – Gian

+0

Claro. Digamos que tienes esto (** Llamar por nombre **): 'int x = 0; foo (t (x)); print (x); 'si era * también *" llamada por valor "esto imprimiría 0. Si fuera * también *" llamada por referencia "* podría * imprimir algo más. – sixtyfootersdude

2

http://en.wikipedia.org/wiki/Evaluation_strategy#Call_by_name

En llamada por valor, evaluar argumentos, recuperar valores que luego se pasan a la función. foo(bar()) se evalúa como arg = bar();, entonces foo (arg) se llama, y ​​en el cuerpo de la función, esta variable arg recién asignado es accesible, modificable, ...

En llamada por su nombre, sucedáneos en el cuerpo de la función cualquier referencia a argumentos por su código utilizado durante la llamada. Luego, al evaluar el cuerpo, evaluarás los argumentos. foo(bar()) con foo(arg) { return arg; } se evaluará como foo(arg) { return bar(); }

1

Llamada por nombre trabajo como llamadas por referencia cuando el parámetro real sea escalador, pero ser diferente cuando el parámetro real es expresión o la matriz de parámetro entonces real es re -evaluado en cada acceso.

aquí es simple ejemplo

begin 
    integer n; 
    procedure p(k: integer); 
     begin 
     print(k); 
     n := n+1; 
     print(k); 
     end; 
    n := 0; 
    p(n+10); 
    end; 
  • llamado de salida de valor => 10 10
  • llamada de salida name => 10 11
+0

vi este ejemplo en otro lugar, debes citar –

Cuestiones relacionadas