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

在Scheme中,为什么要使用let而不是let*?,scheme,Scheme,这是因为我们想要节省内存空间吗?let*必须以更强大的能力为代价,将定义的术语序列化(因为每个术语都可能依赖于以前的术语),而let中的术语可以按任何顺序设置(如果体系结构允许,甚至可以并行设置)。let*,以提高能力为代价,我们必须序列化所定义的术语(因为每个术语都可能依赖于以前的术语),而let中的术语可以按任何顺序设置(如果架构允许,甚至可以并行设置)。Scott的回答是正确的,但我想从另一个角度进行介绍 方案文化非常关注函数式编程。功能代码不应该关心操作的顺序。事实上,这就是为什么像(f

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

let*
必须以更强大的能力为代价,将定义的术语序列化(因为每个术语都可能依赖于以前的术语),而
let
中的术语可以按任何顺序设置(如果体系结构允许,甚至可以并行设置)。

let*
,以提高能力为代价,我们必须序列化所定义的术语(因为每个术语都可能依赖于以前的术语),而
let
中的术语可以按任何顺序设置(如果架构允许,甚至可以并行设置)。

Scott的回答是正确的,但我想从另一个角度进行介绍

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

  • qux
    将在运行
    baz
    之前运行
  • 在运行
    foo
    之前,将同时运行
    bar
    baz
  • 特别是,
    qux
    可以在
    bar
    之前或之后运行,甚至像
    qux
    → <代码>条形图→ <代码>baz→ <代码>foo有效


    出于类似的原因,默认情况下应使用let;它向读者表明,通常的功能假设适用,绑定可以按任何顺序进行评估
    let*
    只应用于提醒读者,绑定依赖于相同
    let*
    形式的以前绑定的异常行为。

    Scott的回答是正确的,但我想从另一个角度来阐述

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

  • qux
    将在运行
    baz
    之前运行
  • 在运行
    foo
    之前,将同时运行
    bar
    baz
  • 特别是,
    qux
    可以在
    bar
    之前或之后运行,甚至像
    qux
    → <代码>条形图→ <代码>baz→ <代码>foo有效

    出于类似的原因,默认情况下应使用let;它向读者表明,通常的功能假设适用,绑定可以按任何顺序进行评估
    let*
    仅用于提醒读者,绑定依赖于同一
    let*
    表单中先前绑定的异常行为。