gpt4 book ai didi

Scheme的 block 结构效率

转载 作者:行者123 更新时间:2023-12-04 22:34:22 25 4
gpt4 key购买 nike

The book在第 1 章中定义了 block 结构,允许您“打包”define s 在过程定义中。

考虑一下 mean-square例如定义:

(define (mean-square x y) 
(define (square x) (* x x))
(define (average x y) (/ (+ x y) 2))
(average (square x) (square y)))

当我运行 (mean-square 2 4)我正确得到 10 .

我的问题是,内部定义(在这个玩具箱中是 squareaverage)是否运行 每次我调用 mean-square通过口译员的程序?如果是这样,那不是效率低下吗?如果不是,为什么?

最佳答案

如果代码有些天真地编译,可能会有一些开销。原因是内部函数是在一个全新的词法环境中定义的,该词法环境在函数的每个条目上都被新实例化。在抽象语义中,每次调用函数时,都必须捕获新的词法闭包并将其连接到该环境框架中的正确位置。

因此,归结为编译器可以优化多少。例如,它可以注意到两个函数实际上都没有引用周围的词法环境。 (这些函数中的 xy 引用指向它们自己的参数,而不是周围的参数 mean-square )。这意味着它们都被移动到顶层而不改变语义:

(define (__anon1 x) (* x x))

(define (__anon2 x y) (/ (+ x y) 2))

(define (mean-square x y)
(define square __anon1)
(define average __anon2)
(average (square x) (square y)))

从现在开始 squareaverage实际上是简单的别名(编译器生成的全局实体的别名,编译器知道它不会被其控制之外的任何东西操纵),它们表示的值可以通过以下方式传播:
(define (mean-square x y)
(__anon2 (__anon1 x) (__anon1 y)))

关于Scheme的 block 结构效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58827404/

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