Во-первых, терминология - выражения после привязки переменных все вместе известны как тело, и каждое выражение в теле является выражением тела. Пример:
(let ((variable-1 value-1)
(variable-2 value-2))
body-expression-1
body-expression-2)
Выражения тела заключены в begin
- (let ((x 2)) x (+ x 1))
совпадает с (let ((x 2)) (begin x (+ x 1)))
.
Каждое выражение тела в begin
оценивается, и возвращаемое значение конечного выражения используется как возвращаемое значение для всего тела. Пример: (begin (+ x 1) (+ x 2))
оценит (+ x 1)
и (+ x 2)
, а затем вернет результат оценки (+ x 2)
.
Если каждое выражение тела в begin
не имеет побочных эффектов, то все, кроме последнего выражения тела, могут быть удалены без изменения поведения программы во время выполнения. Единственными исключениями здесь являются случаи, когда одно из предварительных выражений тела выполняется медленно / не возвращает / выводит ошибки - устранение выражения тела устраняет проблему, которая является изменением поведения программы во время выполнения.
Однако при использовании функций с побочными эффектами полезна возможность вызывать одну или несколько функций для их побочных эффектов и затем возвращать значение.