gpt4 book ai didi

Scheme:什么时候计算let中的表达式?

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

在“The Seasoned Schemer”的第 66 页上,它说 (let ...) 是 :

的缩写
(let ((x1 a1) ... (xn an)) b ...) = ((lambda (x1 ... xn) b ...) a1 ... an)

它用于例如第 70 页:

(define depth*
(lambda (l)
(let ((a (add1 (depth* (car l))))
(d (depth* (cdr l))))
(cond
((null? l) 1)
((atom? (car l)) d)
(else (cond
((> d a) d)
(else a)))))))

但是 lambda 的上述定义表明 (add1 (depth* (car l))(depth* (cdr l)) 被评估并传递到由 (lambda (x1 ... xn) b ...) 表示的 lambda 中。但这意味着列表 l,它可能为空,将在 (null? l) 1) 中的空检查完成之前传递给 carcdr

最佳答案

你说得对 (car l)(cdr l) 将在测试之前执行 如果 l 为 null,因此,如果 l 确实为 null,则会引发错误。继续阅读本书,在接下来的两页中对此进行了解释,并显示了 depth* 的正确版本。

关于Scheme:什么时候计算let中的表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19920340/

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