Scheme中的begin有什么用?
What is the use of begin in Scheme?
我不明白在 Scheme 中编写表达式序列时使用 begin
关键字有何用处。
我的意思是,当我写表达式时,它们不是应该从左到右求值吗?那么,为什么我还必须包含 begin
关键字?
我读到 begin
应该消除输入和输出的副作用。谁能给我一个需要开始的情况?
begin
当语法只允许一种形式时,每次您需要多种形式时,都是必需的。例如,如果您需要在每次使用变量 y
时递增它:
(+ x
(begin (set! y (+ y 1)) y)
z)
如果你省略了开头,那么你就不能写这个表达式(在 Common Lisp 中,相同的表达式可以写成 (+ x (incf y) z)
)。
请注意 (set! x y)
不是 return 值。这就是我们需要使用 begin
的原因,因为 (begin f1 f2 ... fn)
依次计算 f1 ... fn
,然后 return 是 fn
的值。因此,(begin (set! y (+ y 1)) y)
递增 y
的值并且计算 y
,然后它的新值是 returned.
begin
通常在有一些副作用时使用。
我不明白在 Scheme 中编写表达式序列时使用 begin
关键字有何用处。
我的意思是,当我写表达式时,它们不是应该从左到右求值吗?那么,为什么我还必须包含 begin
关键字?
我读到 begin
应该消除输入和输出的副作用。谁能给我一个需要开始的情况?
begin
当语法只允许一种形式时,每次您需要多种形式时,都是必需的。例如,如果您需要在每次使用变量 y
时递增它:
(+ x
(begin (set! y (+ y 1)) y)
z)
如果你省略了开头,那么你就不能写这个表达式(在 Common Lisp 中,相同的表达式可以写成 (+ x (incf y) z)
)。
请注意 (set! x y)
不是 return 值。这就是我们需要使用 begin
的原因,因为 (begin f1 f2 ... fn)
依次计算 f1 ... fn
,然后 return 是 fn
的值。因此,(begin (set! y (+ y 1)) y)
递增 y
的值并且计算 y
,然后它的新值是 returned.
begin
通常在有一些副作用时使用。