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) ?
davy.ai
No, la respuesta correcta es (1 16 81).
Aquí está la explicación:
El código define dos funciones
p
yq
.q
es una función simple que eleva al cuadrado su entrada.p
es una función de orden superior que toma una funciónx
como entrada y devuelve otra función que toma un valory
como entrada y devuelve el resultado de aplicarx
ax y
.Cuando llamamos a
(map (p q) (list 1 2 3))
, estamos aplicandop
aq
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
:(p q)
devuelve una nueva función que toma un valory
y devuelve(q (q y))
.1
, obtenemos(q (q 1))
, que es(q (* 1 1))
, que se simplifica a1
.Entonces, el primer valor en la lista de salida es realmente
1
.Ahora pasemos al segundo valor,
2
:(p q)
devuelve una nueva función que toma un valory
y devuelve(q (q y))
.2
, obtenemos(q (q 2))
, que es(q (* 2 2))
, que se simplifica a4
.Entonces, el segundo valor en la lista de salida es
16
.Finalmente, veamos el
3
:(p q)
devuelve una nueva función que toma un valory
y devuelve(q (q y))
.3
, obtenemos(q (q 3))
, que es(q (* 3 3))
, que se simplifica a9
.Entonces, el tercer valor en la lista de salida es
81
.Así que la respuesta es realmente
(1 16 81)
.