import itertools

def prog_arit(a, d):
    """
    Genera els termes de la progressió aritmètica a partir de ``a`` i amb
    diferència ``d``.

    >>> pa1 = prog_arit(5, 2)
    >>> next(pa1)
    5
    >>> next(pa1)
    7
    >>> next(pa1)
    9
    """
    for i in itertools.count(0):
        yield a + i * d

def serie_arit(a, d, n):
    return sum(itertools.islice(prog_arit(a, d), n))

def prog_geo(a, r):
    return map(lambda i: a * r ** i, itertools.count(0))

def serie(succ, n):
    return sum(itertools.islice(succ, n))
