在Scheme中,为什么要使用let而不是let *?

时间:2015-02-22 23:07:57

标签: scheme

是因为我们想节省内存空间吗?

2 个答案:

答案 0 :(得分:3)

斯科特的回答是正确的,但我想以另一种观点投入。

Scheme文化关注函数式编程。功能代码不应该关心操作的顺序。事实上,这就是为什么像(foo (bar) (baz (qux)))这样的表达式没有说明这些函数的运行顺序,除了:

  1. qux将在baz运行
  2. 之前运行
  3. barbaz都将在foo运行之前运行
  4. 特别是,qux可以在bar之前或之后运行,甚至可以在quxbarbazfoo之类的序列中运行是有效的。

    出于类似的原因,默认情况下应使用let;它向读者发出通常的功能假设的信号,即可以按任何顺序评估绑定。 let*只应用于提醒读者注意具有绑定的异常行为取决于以前let*形式的先前绑定。

答案 1 :(得分:2)

let*,为了更有能力,必须序列化所定义的术语(因为每个术语可以取决于以前的术语),而let中的术语可以在任何术语中设置订单(甚至是并行的,如果架构允许的话)。