def aggregate(iterable, func, selector=None, seed=_undefined): func = Function(func, arity=2) selector = Function(selector, arity=1) if seed is _undefined: return selector(compatible.reduce(func, iterable)) else: return selector(compatible.reduce(func, iterable, seed))
def count(iterable, pred=None): pred = Function(pred or utils.always(True), arity=1) return compatible.reduce(lambda n, _: n + 1, where(iterable, pred), 0)