Инструменты пользователя

Инструменты сайта


examination:flp:question20

Вычисление лямбда-вызова, или лямбда-преобразование

Вычисление лямбда-вызова, или применение лямбда- выражения к фактическим параметрам, производится в два этапа. Сначала вычисляются значения фактических параметров и соответствующие формальные параметры связываются с полученными значениями. Этот этап называется связыванием параметров (spreading). На следующем этапе с учетом новых связей вычисляется форма, являющаяся телом лямбда-выражения, и полученное значение возвращается в качестве значения лямбда-вызова. Формальным параметрам после окончания вычисления возвращаются те связи, которые у них, возможно, были перед вычислением лямбда- вызова. Весь этот процесс называют лямбда-преобразованием (lambda conversion).

Объединение лямбда-вызовов

Лямбда-вызовы можно свободно объединять между собой и другими формами. Вложенные лямбда-вызовы можно ставить как на место тела лямбда-выражения, так и на место фактических параметров. Например, в следующем вызове тело лямбда-выражения содержит вложенный лямбда-вызов:

_((lambda (у)            ; у лямбда-вызова 
((lanbda (x)             ; тело вновь 
(list у x))              ; лямбда-вызов 
'ВНУТРЕННИЙ)) 
'ВНЕШНИЕ) 
> (ВНЕШНИЕ ВНУТРЕННИЙ) 


В приведенном ниже примере лямбда-вызов является аргументом другого вызова:

_((lambda (x)       ;лямбда-вызов
(list 'ВТОРОЙ x))   ;у которого аргументом является новый лямбда-вызов 
((lambda (у)  
(list у))  
'ПЕРВЫЙ)) 
> (ВТОРОЙ (ПЕРВЫЙ)) 


Обратите внимание, что лямбда-выражение без аргументов (фактических параметров) представляет собой лишь определение, но не форму, которую можно вычислить. Само по себе оно интерпретатором не воспринимается:

_(lambda (х у) (cons х (cons у nil))) 
> Error: Undefined function LAMBDA  

Лямбда-выражение - функция без имени

Лямбда-выражение является как чисто абстрактным механизмом для определения и описания вычислений, дающим точный формализм для параметризации вычислений при помощи переменных и изображения вычислений, так и механизмом для связывания формальных и фактических параметров на время выполнения вычислений. Лямбда-выражение - это безымянная функция, которая пропадает тотчас после вычисления значения формы. Ее трудно использовать снова, так как нельзя вызвать по имени, хотя ранее выражение было доступно как списочный объект. Однако используются и безымянные функции, например при передаче функции в качестве аргумента другой функции или при формировании функции в результате вычислений, другими словами, при синтезе программ.

examination/flp/question20.txt · Последние изменения: 2014/01/15 08:17 (внешнее изменение)