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