The Scheme Programming Language, Third Edition [Electronic resources]

Jean-Pierre Hbert, R. Kent Dybvig

نسخه متنی -صفحه : 98/ 33
نمايش فراداده

5.2. Sequencing

(begin exp1 exp2 ...)

syntax

returns: the result of the last expression

The expressions exp1 exp2 … are evaluated in sequence from left to right. begin is used to sequence assignments, input/output, or other operations that cause side effects.

(define x 3)
(begin
(set! x (+ x 1))
(+ x x)) ⇒ 8

A begin form may contain zero or more definitions in place of the expressions exp1 exp2 …, in which case it is considered to be a definition and may appear only where definitions are valid.

(let ()
(begin (define x 3) (define y 4))
(+ x y)) ⇒ 7

This form of begin is primarily used by syntactic extensions that must expand into multiple definitions. (See page 91.)

The bodies of many syntactic forms, including lambda, let, let*, and letrec, as well as the result clauses of cond, case, and do, are treated as if they were inside an implicit begin; that is, the expressions making up the body or result clause are executed in sequence.

(define swap-pair!
(lambda (x)
(let ((temp (car x)))
(set-car! x (cdr x))
(set-cdr! x temp)
x)))
(swap-pair! (cons 'a 'b)) ⇒ (b . a)