Skip to content

Instantly share code, notes, and snippets.

@zlangley
Last active February 7, 2017 02:16
Show Gist options
  • Save zlangley/51fdec10f89eeeafa49f to your computer and use it in GitHub Desktop.
Save zlangley/51fdec10f89eeeafa49f to your computer and use it in GitHub Desktop.
Memoize 1-parameter functions. Saw something like this in the Advanced Swift WWDC talk. Tried to reproduce it.
func memoize<T: Hashable, U>(f: ((T -> U), T) -> U) -> (T -> U) {
var cache = [T: U]()
var memoized: (T -> U)!
memoized = { n in
if cache[n] == nil {
cache[n] = f(memoized, n)
}
return cache[n]!
}
return memoized
}
let fibonacci: (Int -> Int) = memoize {
f, n in return (n == 0 || n == 1) ? n : f(n - 1) + f(n - 2)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment