gpt4 book ai didi

coding-style - 为什么Scheme中优先定义let?

转载 作者:行者123 更新时间:2023-12-02 15:47:49 25 4
gpt4 key购买 nike

我总是这样编写我的计划程序(并且看到它们是这样写的):

(define (foo x)
(let ((a ...))
((b ...))
...))

我的一位学生写道:

(define (foo x)
(define a ...)
(define b ...)
...)

两者给出相同的结果。我理解行为上的差异:第一个创建一个指向过程应用程序框架的新框架,而后者直接修改过程应用程序框架。后者会产生稍微更好的性能。

另一个区别是前者避免在过程主体中的指令序列之前使用隐式的 begin

为什么是前者的标准样式?

最佳答案

其实两种风格都不错。 In fact, some people prefer to use internal definitions.

而且,后者也不一定“直接修改程序应用程序框架”;内部定义的处理方式与 letrec (对于 R5RS 兼容的系统)或 letrec* (对于 R6RS 和 R7RS 兼容的系统)相同。因此,您的第二个示例实际上与:

(define (foo x)
(letrec* ((a ...)
(b ...))
...))

事实上,举个例子,Racket 将内部定义重写为其等效的 letrec* 表达式,因此性能上没有差异(除了 let 之间存在任何差异) > 和 letrec*,当然)。

关于coding-style - 为什么Scheme中优先定义let?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21866275/

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