2012-05-14 8 views

Respuesta

7

Cuando se escribe let x x = ... está definiendo una función llamada x que se une el nombre x a su argumento.

Desde que utilizó en lugar de letlet rec, la función no conoce su propio nombre, por lo que la medida de lo que sabe, el único x vale la pena conocer es el que se pasa como un argumento.

Por lo tanto, cuando se llama a la función con x 2, se une el valor 2 al nombre x y evalúa x+1, obteniendo como resultado 3.

+0

Gracias, no sabía que una función y un argumento podrían tener el mismo nombre. – bbaja42

+1

Pueden, pero obviamente deben ** nunca, nunca ** hacer esto en código real :) (De hecho, esto incluso funciona con 'let rec' en lugar de' let', y tiene el potencial de ser aún más confuso ... .) –

+4

Es más fácil ver por qué esto es posible cuando te das cuenta de que 'let xx = e' es solo una abreviatura de' let x = (fun x -> e) '. –