Dynamické programování ve Swiftu

stud

Dynamické programování ve Swiftu
« kdy: 26. 08. 2015, 14:57:42 »
Jak se dá napsat ve Swiftu generická funkce pro ukládání mezivýsledků? Něco jako

f = dynamicFunction(faktoriál)
print(f(5))

Vzhledem k funkcionalitě jazyka by to mělo jít, ale vůbec nevím, kde začít :(


zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Dynamické programování ve Swiftu
« Odpověď #1 kdy: 27. 08. 2015, 12:57:12 »
Kód: [Vybrat]
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) }

zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail