Suposem que principi i fi són enters, i relacio és una funció de dos paràmetres que retorna un booleà (True o False). Suposarem que fi - principi ≥ 2.
Feu una funció comprova_funcio(relacio, principi, fi) que retorna una funció. Aquesta funció retornada, anomenem-la fret, ha de tenir les següents característiques: Té una funció f com a paràmetre, i ha de retornar True si la relació relacio és compleix per a totes les parelles adjacents dins la seqüència f(principi), f(principi+1),..., f(fi-1).
Dit d’una altra manera, comprova_funcio(relacio, principi, fi) ha de retornar una funció, que podem anomenar fret, tal que fret(f) ha de retornar True si es verifica que:
relacio(f(principi),f(principi+1)) = True
relacio(f(principi+1),f(principi+2)) = True
...
relacio(f(fi-2),f(fi-1)) = True
En altre cas, fret(f) ha de retornar False
Per exemple, en el joc de proves que veieu més avall:
- La funció comprova_eq amb una funció f com a argument, és a dir, comprova_eq(f), comprova que els valors de f(0), f(1), f(2), f(3) i f(4) siguin tals que: f(0) == f(1), f(1) == f(2), f(2) == f(3), i f(3) == f(4). Si es verifiquen aquestes quatre igualtats comprova_eq(f) retorna True, altrament retornarà False.
- La funció comprova_up amb una funció f com a argument, és a dir, comprova_up(f), comprova que els valors de f(0), f(1), f(2), f(3) i f(4) siguin tals que: f(0) < f(1), f(1) < f(2), f(2) < f(3), i f(3) < f(4). Si es verifiquen aquestes quatre desigualtats comprova_up(f) retorna True, altrament retornarà False.
Entrada
La funció té tres paràmetres, una funció i dos enters que s’han d’ajustar als requeriments mencionats.
Observacions
Un cop definida la funció, en provar-la al REPL de Python us hauria de sortir el mateix que podeu observar més avall.
>>> comprova_eq = comprova_funcio(lambda x,y: x == y, 0, 5) >>> comprova_eq(lambda x: 3) True >>> comprova_eq(lambda x: x) False >>> >>> comprova_up = comprova_funcio(lambda x,y: x < y, 0, 5) >>> comprova_up(lambda x: x) True >>> comprova_up(lambda x: 3) False >>>