gpt4 book ai didi

swift - 搞清楚 WWDC 2014 的 memoize - Session 404

转载 作者:行者123 更新时间:2023-11-30 12:47:55 28 4
gpt4 key购买 nike

我正在努力理解 Advanced Swift 中解释的内存斐波那契(简单)版本中使用的参数。 session (跳至 00:38:00)

在 session 中定义了以下 memoize 函数(适用于 Swift 3)

func memoize<T: Hashable, U>(body: @escaping (T) -> U) -> (T) -> U {
var memo = Dictionary<T, U>()
return { x in
if let q = memo[x] { return q }
let r = body(x)
memo[x] = r
return r
}
}

它会包装简单的函数,例如:

let ntos = memoize {(n: Int) -> String in
print("Must evaluate something")
return "\(n)"
}

print(ntos(3))
print(ntos(3))
print(ntos(30))

输出:

Must evaluate something
3
3
Must evaluate something
30

ntos的类型是(Int) -> String,所以memoize中的T就变成了IntU > 变为字符串

但是对于斐波那契函数,苹果使用的示例是

let fibonacci = memoize {
fibonacci, n in
n < 2 ? Double(n) : fibonacci(n: n - 1) + fibonacci(n: n - 2)
}

这里我不确定T、U适应的是什么类型?该函数的递归性质如何表现?闭包参数声明 fibonacci, n 如何转换为类型 memoize (T) -> U 主体参数?

为什么斐波那契在传递给 memoize 的闭包定义中是偶数?我认为这与柯里化(Currying)函数的想法有关(在 Swift 3 中被闭包取代),但实现语法对我来说并不合适。

最佳答案

我决定更进一步,写了一篇完整的文章 walk through of memoize

关于swift - 搞清楚 WWDC 2014 的 memoize - Session 404,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41384931/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com