Scheme中的begin有什么用?

时间:2016-04-09 13:18:58

标签: scheme

我不明白使用begin关键字在编写Scheme中的一系列表达式时非常有用。

我的意思是,当我写表达时,他们不应该从左到右进行评估?那么,为什么我仍然必须添加begin关键字?

我读到begin应该消除输入和输出的副作用。任何人都可以给我一个必要的开始的情况吗?

1 个答案:

答案 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通常在有副作用时使用。