(begin ...)
is how you evaluate multiple expressions and return the last one. Many other constructs act as "implicit" begin
blocks (they allow multiple expressions just like a begin
block but you don't need to say begin
), like the body of a cond
clause, the body of a define
for functions, the body of a lambda
, the body of a let
, etc.; you may have been using it without realizing it. But for if
, that is not possible in the syntax because there are two expressions (the one for true and the one for false) next to each other, and so allowing multiple expressions would make it ambiguous. So you have to use an explicit begin
construct.