def proc_seq(n, sequencer, alive, update, init):
    """Process a sequence of items.

    sequencer: function that produces the next item in the sequence
    alive: function that tests whether to continue processing
    update: function that updates the state
    init: initial state

    >>> def sequencer(n): return n - 1
    >>> def alive(n): return n > 0
    >>> def update(state, n): return state + n
    >>> proc_seq(5, sequencer, alive, update, 0)
    15
    """
    state = init
    while alive(n):
        state = update(state, n)
        n = sequencer(n)
    return state