Sintetitza

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

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

iesquemes.isintetitza(acumula, it, neutre)

Aplica la funció acumula als elements de l’iterador it començant per neutre i el d’índex 0

Paràmetres:
  • acumula – funció amb dos paràmetres.

  • seq – iterador amb els elements a acumular.

  • neutre – element neutre de l’operació acumula.

Retorna:

acumula(...acumula(acumula(neutre, it[0]), it[1])..., it[-1])

Per exemple:


>>> s = [8, 3, 5, 2]
>>> isintetitza(operator.add, iter(s), 0)
18
>>> isintetitza(max, iter(s), s[0])
8
>>> isintetitza(operator.mul, iter(s), 1)
240

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

Solució recursiva final


def isintetitza(acumula, it, valor):
    e = next(it, None)
    if not e:
        r = valor
    else:
        r = isintetitza(acumula, it, acumula(valor, e))
    return r