Escribir una función maximizador(f) que, dada una función como parámetro (llamémosla f; supondremos que esta función f recibe un número y retorna un número), retorne otra función.
Esta función retornada debe ser una función tal que, después de n−1 invocaciones con parámetros x1,…,xn−1, al invocarla con parámetro xn escriba en el stdout el máximo de los f(xi) encontrados hasta ese momento (es decir, el máximo de f(x1),…,f(xn) para todos los xi con los que esta función, retornada por maximizador(f), ha sido invocada).
Entrada
La función maximizador(f) tiene un parámetro: Una función que, dado un número, retorna un número.
Salida
La función maximizador(f) retorna una función com la descrita en el enunciado.
Observaciones
La funció retornada por maximizador(f) tiene que escribir el máximo de f(x1),…,f(xn) para todos los xi con los que esta función, retornada per maximizador(f), ha sido invocada, y debe retornar una funció que continue haciendo lo requerido por el enunciado. Esta función retornada por maximizador(f) tiene que hacer dos cosas: escribir en el stdout y retornar una función..
No puede utilitzarse ninguna lista, diccionario, conjunto o ninguna otra estructura de datos. Tan solo números y funciones.
En este problema solo hay que enviar un fichero con la función requerida, sin más código adicional.
Una vez definida la función requerida, al ejecutarla en el REPL de Python debería observarse lo mismo que puede observarse aquí abajo.
>>> import math >>> cuadrado = lambda x: x*x >>> coseno = math.cos >>> >>> h = maximizador(cuadrado) >>> h = h(2) 4 >>> h = h(3) 9 >>> h = h(2) 9 >>> h = h(1) 9 >>> h = h(5) 25 >>> h = h(3) 25 >>> >>> # También podemos hacerlo así, más compacto: >>> h = maximizador(cuadrado) >>> h = h(2)(3)(2)(1)(5)(3) 4 9 9 9 25 25 >>> # o, directamente (ahora con la función abs): >>> h = maximizador(abs)(2)(1)(3)(2)(-4) 2 2 3 3 4 >>> # finalmente, usemos el coseno: >>> h = maximizador(coseno)(math.pi)(math.pi/2)(4.2)(0.1)(math.pi/3)(math.pi/4) -1.0 6.123233995736766e-17 6.123233995736766e-17 0.9950041652780258 0.9950041652780258 0.9950041652780258 >>>