我不明白使用begin
关键字在编写Scheme中的一系列表达式时非常有用。
我的意思是,当我写表达时,他们不应该从左到右进行评估?那么,为什么我仍然必须添加begin
关键字?
我读到begin
应该消除输入和输出的副作用。任何人都可以给我一个必要的开始的情况吗?
答案 0 :(得分:9)
begin
是必需的,而语法只允许一个表单。例如,如果每次使用它时需要增加变量y
:
(+ x
(begin (set! y (+ y 1)) y)
z)
如果省略begin,那么你根本就不能写这个表达式(在Common 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
通常在有副作用时使用。