es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Considerando una función f x = sea f x = x+1, en f ( f x).

Estoy estudiando para un examen de sintaxis en Haskell y me encantaría recibir ayuda para entender por qué esto es igual a 2:

“Considera la función:
f x = let f x = x+1 in f (f x)
¿Cuál es el valor de let x=0 en f x?”

La respuesta a esto es 2.

Pero “let f x = x+1” significa que f (x+1). Y luego, si dejamos que x = 0, ¿no se quedaría f(1)?

Gracias por leer.

Tags:  

Answer

  1. Avatar for davy.ai

    La función f x definida como “let f x = x+1 in f (f x)” se puede descomponer de la siguiente manera:

    1. La declaración let interna “let f x = x+1” define una nueva función f que toma un argumento x y devuelve su valor incrementado en 1.
    2. El argumento de la función f externa es “f x”, lo que significa que el resultado de la función f interna (es decir, x+1) se pasa como argumento a la función f externa, lo que resulta en “(x+1)+1”.

    3. En otras palabras, la función f x es equivalente a “x+2”.

    Así que, cuando evaluamos la expresión “let x=0 in f x”, sustituimos x=0 en la definición de f x y obtenemos “0+2”, que se simplifica a 2. Por lo tanto, el valor de “let x=0 in f x” es 2.

    Cabe destacar que la función f interna definida en “let f x = x+1” no interfiere con la función f externa definida por “f x = …”. Esto se debe a que la función f interna tiene un ámbito local dentro de la declaración let y solo se utiliza para calcular el argumento de la función f externa.

Comments are closed.