Feu una funció maximitzador(f) que,
donada una funció com a paràmetre (anomenem-la
;
suposarem que aquesta funció
rep un nombre i retorna un nombre), retorni una altra
funció.
Aquesta funció retornada ha de ser una funció tal que, després de
invocacions amb paràmetres
,
quan s’invoca amb paràmetre
escrigui al stdout el màxim dels
trobats fins el moment (és a dir, el màxim de
per a tots els
amb que aquesta funció, retornada per
maximitzador(f), ha estat invocada).
La funció maximitzador(f) té un
paràmetre: Una funció que, donat un nombre, retorna un nombre.
La funció maximitzador(f) retorna una
funció com la descrita a l’enunciat.
Fixeu-vos que la funció retornada per
maximitzador(f) ha d’escriure el
màxim de
per a tots els
amb que aquesta funció, retornada per
maximitzador(f), ha estat invocada, i ha
de retornar una funció que continuï fent el que demana
l’enunciat. Aquesta funció retornada per
maximitzador(f) ha de fer les dues coses,
escriure i retornar.
No podeu utilitzar cap llista, diccionari, conjunt o cap altra estructura de dades. Només nombres i funcions.
En aquest problema només cal que envieu un fitxer amb la funció demanada, sense cap codi addicional.
Un cop definida la funció, en provar-la al REPL de Python us hauria de sortir el mateix que podeu observar més avall.
>>> import math >>> quadrat = lambda x: x*x >>> cosinus = math.cos >>> >>> h = maximitzador(quadrat) >>> h = h(2) 4 >>> h = h(3) 9 >>> h = h(2) 9 >>> h = h(1) 9 >>> h = h(5) 25 >>> h = h(3) 25 >>> >>> # També podem fer-ho així, més compacte: >>> h = maximitzador(quadrat) >>> h = h(2)(3)(2)(1)(5)(3) 4 9 9 9 25 25 >>> # o, directament (ara amb la funció abs): >>> h = maximitzador(abs)(2)(1)(3)(2)(-4) 2 2 3 3 4 >>> # finalment, provem-ho amb el cosinus: >>> h = maximitzador(cosinus)(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 >>>