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.

Resultado de la función map.

Hola, estoy tratando de entender la salida del siguiente código:

(define p (lambda (x) (lambda (y) (x (x y)))))
(define q (lambda (x) (* x x)))

cuando uso:

(map (p q) (list 1 2 3))

el resultado es:

(1 16 81)

¿No debería ser la respuesta:

(1 4 9) ?
Tags:  ,

Answer

  1. Avatar for davy.ai

    No, la respuesta correcta es (1 16 81).

    Aquí está la explicación:

    El código define dos funciones p y q. q es una función simple que eleva al cuadrado su entrada. p es una función de orden superior que toma una función x como entrada y devuelve otra función que toma un valor y como entrada y devuelve el resultado de aplicar x a x y.

    Cuando llamamos a (map (p q) (list 1 2 3)), estamos aplicando p a q y luego mapeando la función resultante sobre la lista (1 2 3). Esto significa que para cada valor en la lista, aplicamos la función (p q) a ese valor.

    Veamos qué sucede para el primer valor, 1:

    1. (p q) devuelve una nueva función que toma un valor y y devuelve (q (q y)).
    2. Cuando aplicamos esta función a 1, obtenemos (q (q 1)), que es (q (* 1 1)), que se simplifica a 1.

    Entonces, el primer valor en la lista de salida es realmente 1.

    Ahora pasemos al segundo valor, 2:

    1. (p q) devuelve una nueva función que toma un valor y y devuelve (q (q y)).
    2. Cuando aplicamos esta función a 2, obtenemos (q (q 2)), que es (q (* 2 2)), que se simplifica a 4.

    Entonces, el segundo valor en la lista de salida es 16.

    Finalmente, veamos el 3:

    1. (p q) devuelve una nueva función que toma un valor y y devuelve (q (q y)).
    2. Cuando aplicamos esta función a 3, obtenemos (q (q 3)), que es (q (* 3 3)), que se simplifica a 9.

    Entonces, el tercer valor en la lista de salida es 81.

    Así que la respuesta es realmente (1 16 81).

Comments are closed.