Читайте также:
|
|
Вычисление функции создаёт на время вычисления новые связи для формальных параметров функции. Новые связи внутри формы можно создать и с помощью предложения let. Эта структура выглядит так:
(nil let (( m1 {value1} ) |m1 ( m2 {value2} ) |m2 … )
form 1
form 2 … )
Предложение let вычисляется так, что сначала динамические переменные m1, m2, … из первого "аргумента" формы связываются (одновременно) с соответствующими значениями знач1, знач2, … Затем пошагово вычисляются значения форм форма1, форма2, … В качестве значения всей формы возвращается значение последней формы. Как и у функций, после окончания вычисления связи динамических переменных m1, m2, … ликвидируются и любые изменения их значений (setq) не будут видны извне. Например:
>(nil setq a 2)nil>(nil let ((a 0)) (nil setq a 1))nil>a2Форма let является на самом деле синтаксическим видоизменением лямбда-вызова, в которой формальные и фактические параметры помещены совместно в начале формы:
(nil let (( m1 {a1} ) ( m2 {a2} ) … ( mn {an} ))
form 1 form2 … )
≡
(nil (lambda
( m1 m2 … mn ); формальный параметр
form 1 form2 … ); тело функции
(nil progn {a1} ) (nil progn {a2} ) … (nil progn {an} )); фактический параметр
Тело лямбда-выражения может состоять из нескольких форм, которые вычисляются пошагово, и значение последней формы возвращается в качестве значения лямбда-вызова.
Значения переменным формы let присваиваются одновременно. Это означает, что значения всех переменных m i вычисляются до того, как осуществляется связывание с формальными параметрами. Новые связи этих переменных ещё не действуют в момент вычисления начальных значений переменных, которые перечислены в форме позднее. Например:
Дата добавления: 2015-07-21; просмотров: 92 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Управляющие структуры Лиспа являются формами | | | Разветвление вычислений: условное предложение COND |