Aplica

Dissenya la versió recursiva de l’esquema de recorregut aplica.

Desa al mòdul esquemes la funció recursiva següent:

esquemes.aplica(funcio, seq)

Aplica la funció funcio a cada un dels elements de la seqüència seq

Paràmetres:
  • funcio – funció amb un paràmetre.

  • seq – seqüència.

Tipus de retorn:

list

Retorna:

[funcio(seq[0]), funcio(seq[1])..., funcio(seq[-1])]

Per exemple:


>>> s = [2, -1, -5, 7, -25]
>>> aplica(abs, s)
[2, 1, 5, 7, 25]
>>> aplica(lambda x: x**2, s)
[4, 1, 25, 49, 625]
>>> aplica(lambda x: x/2, s)
[1.0, -0.5, -2.5, 3.5, -12.5]

Disposes de més jocs de proves al fitxer test-aplica.txt i d’una solució al fitxer esquemes.py.

Solucions

Recursiva lineal


def aplica_1(funcio, seq):
    if len(seq) == 0:
        r = []
    else:
        r = aplica_1(funcio, seq[1:])
        r.insert(0, funcio(seq[0]))
    return r

Recursiva lineal amb immersió d’eficiència


def aplica_2(funcio, seq):
    return aplica_2_i(funcio, seq, range(len(seq)))

def aplica_2_i(funcio, seq, llesca):
    if len(llesca) == 0:
        r = []
    else:
        r = aplica_2_i(funcio, seq, llesca[1:])
        r.insert(0, funcio(seq[llesca[0]]))
    return r