在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*
表单中先前绑定的异常行为。