func memoize<T:Hashable,U>(block:(T->U,T)->U) -> T -> U { var memo = Dictionary<T,U>() var result:(T->U)! result = { x in if let q = memo[x] { return q } let r = block(result, x) memo[x] = r return r } return result}let faktoriál = memoize { f, n in n <= 1 ? 1 : n * f(n - 1) }