是因为我们想节省内存空间吗?
答案 0 :(得分:3)
Scheme文化关注函数式编程。功能代码不应该关心操作的顺序。事实上,这就是为什么像(foo (bar) (baz (qux)))
这样的表达式没有说明这些函数的运行顺序,除了:
qux
将在baz
运行bar
和baz
都将在foo
运行之前运行特别是,qux
可以在bar
之前或之后运行,甚至可以在qux
→bar
→baz
→foo
之类的序列中运行是有效的。
出于类似的原因,默认情况下应使用let
;它向读者发出通常的功能假设的信号,即可以按任何顺序评估绑定。 let*
只应用于提醒读者注意具有绑定的异常行为取决于以前let*
形式的先前绑定。
答案 1 :(得分:2)
let*
,为了更有能力,必须序列化所定义的术语(因为每个术语可以取决于以前的术语),而let
中的术语可以在任何术语中设置订单(甚至是并行的,如果架构允许的话)。