首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从WWDC 2014 -会话404中找出回忆录

从WWDC 2014 -会话404中找出回忆录
EN

Stack Overflow用户
提问于 2016-12-29 18:00:37
回答 1查看 108关注 0票数 0

我正在了解在高级Swift会话中解释的回忆录fibonacci的(简单)版本中使用的参数(跳到00:38:00)。

在会话中,定义了以下回忆录函数(改编自Swift 3)

代码语言:javascript
运行
复制
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
    }
}

它将封装简单的函数,例如:

代码语言:javascript
运行
复制
let ntos = memoize {(n: Int) -> String in
    print("Must evaluate something")
    return "\(n)"
}

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

产出:

必须评估某事3 3必须评估某事30

ntos的类型是(Int) -> String,所以回忆录中的T变成了IntU变成了String

但是对于斐波纳契函数,苹果使用的例子是is。

代码语言:javascript
运行
复制
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 body参数类型?

为什么斐波纳契甚至在封闭性的定义中通过回忆录?我想,这与咖喱函数(在Swift 3中被闭包所取代)的想法有关,但是实现语法对我来说并没有点击。

EN

回答 1

Stack Overflow用户

发布于 2017-01-01 18:44:35

我决定再往前走一步,写了一个全新的回忆录

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41384931

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档