Scheme begin in方案有什么用途?

Scheme begin in方案有什么用途?,scheme,Scheme,我不明白在Scheme中编写表达式序列时,使用begin关键字是如何有用的 我的意思是,当我写表达式时,它们不是应该从左到右求值吗?那么,为什么我还必须包含begin关键字呢 我读到begin应该可以消除输入和输出的副作用。有谁能告诉我需要begin的情况吗?begin在语法只允许一种形式的情况下,每次需要多个形式时都需要begin。例如,如果每次使用变量y时需要增加该变量: (+ x (begin (set! y (+ y 1)) y) z) 如果省略begin,则无法编写此

我不明白在Scheme中编写表达式序列时,使用
begin
关键字是如何有用的

我的意思是,当我写表达式时,它们不是应该从左到右求值吗?那么,为什么我还必须包含
begin
关键字呢


我读到
begin
应该可以消除输入和输出的副作用。有谁能告诉我需要begin的情况吗?

begin
在语法只允许一种形式的情况下,每次需要多个形式时都需要begin。例如,如果每次使用变量
y
时需要增加该变量:

(+ x 
   (begin (set! y (+ y 1)) y) 
   z)
如果省略begin,则无法编写此表达式(在公共Lisp中,相同的表达式可以写成
(+x(incf y)z)

请注意,
(set!x y)
不返回值。这就是我们需要使用
begin
的原因,因为
(begin f1 f2…fn)
计算
f1。。。依次返回fn
,然后返回
fn
的值。因此,
(begin(set!y(+y 1))y
增加
y
的值,并计算
y
,然后返回其新值


begin
通常在有副作用时使用

编写函数时,
begin
总是添加到后台<代码>开始按外观顺序计算以下表格。