Node:Локальные переменные,
Next:Сцепление окружений,
Previous:Об окружении,
Up:О замыканиях
[Показать/скрыть оригинал] [Показать/скрыть перевод] [Переключить перевод и оригинал]
We have seen how to create top level variables using the define
syntax (see Definition). It is often useful to create variables
that are more limited in their scope, typically as part of a procedure
body. In Scheme, this is done using the let syntax, or one of
its modified forms let* and letrec. These syntaxes are
described in full later in the manual (see Local Bindings). Here
our purpose is to illustrate their use just enough that we can see how
local variables work.
Ранее было рассказано как создавать переменные верхнего уровня, используя
синтаксис define (см. Определение переменных).
Весьма часто возникает необходимость создания переменных с более ограниченной областью видимости (scope),
обычно, обычно в процедурах. В Scheme, это делается с использованием синтасиса let,
или его модифицированных форм let* и letrec. Эти конструкции будут полностью
описаны в дальнейшем материале (см. Локальные привязки).
В данном разделе будет показана их работа в том объёме, который необходим для понимания
принципа работы локальных переменных.
For example, the following code uses a local variable s to
simplify the computation of the area of a triangle given the lengths of
its three sides.
Например, нижеприведённый код использует локальную переменную s
для упрощения подсчёта площади треугольника по длине его трёх сторон.
(define a 5.3)
(define b 4.7)
(define c 2.8)
(define area
(let ((s (/ (+ a b c) 2)))
(sqrt (* s (- s a) (- s b) (- s c)))))
The effect of the let expression is to create a new environment
and, within this environment, an association between the name s
and a new location whose initial value is obtained by evaluating
(/ (+ a b c) 2). The expressions in the body of the let,
namely (sqrt (* s (- s a) (- s b) (- s c))), are then evaluated
in the context of the new environment, and the value of the last
expression evaluated becomes the value of the whole let
expression, and therefore the value of the variable area.
Эффект от выражения let состоит в создании нового
окружения и, внутри этого окружения, связывании имени s и нового расположения,
чьё начальное значение получается вычислением (/ (+ a b c) 2). Выражение
в теле let (т.е. (sqrt (* s (- s a) (- s b) (- s c)))) затем
вычисляется в контексте нового окружения, и значение последнего выражения, будучи вычисленным,
становится значением всего let-выражения, и следовательно, значением area.
> > далее > >