ВУЗ:
Составители:
Рубрика:
17
ОПРЕДЕЛЕНИЕ ФУНКЦИИ
Лямбда - выражение и лямбда - вызов
В основе функциональной парадигмы программирования лежит Лямбда -
исчисление Черча, представляющее собой точный и простой формализм вычисления
функций. В соответствии с этим формализмом вычисление любого выражения или
функции можно определить Лямбда выражением, имеющим в Лисп-Микро следующий
формат:
(LAMBDA (V1 V2 ... Vn) S1 S2 ... Sm)
где Vl, V2,..., Vn – формальные параметры
S1, S2, ..., Sm – S-выражения, представляющие тело исходной функции.
Вычисление лямбда – выражения производится с помощью лямбда – вызова,
имеющего вид:
(лямбда – выражение аl а2 ... an), где аl, а2,..., an – фактические параметры.
Полный процесс определения и вычисления некоторой функции в терминах
лямбда — исчисления называют лямбда- преобразованием, которое имеет вид:
((LAMBDA (V1 V2 ... Vn) S1 S2 ... Sm) а1 ... an).
Сначала вычисляются фактические параметры аl, a2,..., an, значения которых
связываются с соответствующими формальными параметрами Vl, V2,..., Vn, а на
следующем этапе с учетом новых связей вычисляются S-выражения Sl, S2, ..., Sm,
представляющие тело исходной функции. Значение последнего выражения Sm
возвращается в качестве результата.
Например, оформление в виде лямбда — выражения вычисления второго
элемента в списке и выделение его из списка (А В С):
[1] ((lambda (l) (car (cdr l))) '(а b с))
B
В лямбда – преобразованиях процедуры
определения и вызова функции
объединены в единой форме, поэтому, если нужно повторить вычисление исходной
функции с новыми значениями аргументов, например, выделить второй элемент в
списке (1 (В С) 2), нужно вновь записать его полную форму:
[2] ((lambda (l) (car (cdr l))) '(1 (b с) 2))
(B С)
Это вызывает определенные неудобства, особенно, если тело функции
представляет собой громоздкую запись.
В Микро-Лиспе
в отличие от Коммон - Лиспа, где такая возможность
отсутствует, определение лямбда – выражения можно связывать с определенным
именем, а затем вызывать это лямбда – выражение по имени как обычную
именованную функцию:
[3] (define second (lambda (l) (car (cdr l))))
SECOND
[4] (second '(а b с))
B
17 ОПРЕДЕЛЕНИЕ ФУНКЦИИ Лямбда - выражение и лямбда - вызов В основе функциональной парадигмы программирования лежит Лямбда - исчисление Черча, представляющее собой точный и простой формализм вычисления функций. В соответствии с этим формализмом вычисление любого выражения или функции можно определить Лямбда выражением, имеющим в Лисп-Микро следующий формат: (LAMBDA (V1 V2 ... Vn) S1 S2 ... Sm) где Vl, V2,..., Vn – формальные параметры S1, S2, ..., Sm – S-выражения, представляющие тело исходной функции. Вычисление лямбда – выражения производится с помощью лямбда – вызова, имеющего вид: (лямбда – выражение аl а2 ... an), где аl, а2,..., an – фактические параметры. Полный процесс определения и вычисления некоторой функции в терминах лямбда — исчисления называют лямбда- преобразованием, которое имеет вид: ((LAMBDA (V1 V2 ... Vn) S1 S2 ... Sm) а1 ... an). Сначала вычисляются фактические параметры аl, a2,..., an, значения которых связываются с соответствующими формальными параметрами Vl, V2,..., Vn, а на следующем этапе с учетом новых связей вычисляются S-выражения Sl, S2, ..., Sm, представляющие тело исходной функции. Значение последнего выражения Sm возвращается в качестве результата. Например, оформление в виде лямбда — выражения вычисления второго элемента в списке и выделение его из списка (А В С): [1] ((lambda (l) (car (cdr l))) '(а b с)) B В лямбда – преобразованиях процедуры определения и вызова функции объединены в единой форме, поэтому, если нужно повторить вычисление исходной функции с новыми значениями аргументов, например, выделить второй элемент в списке (1 (В С) 2), нужно вновь записать его полную форму: [2] ((lambda (l) (car (cdr l))) '(1 (b с) 2)) (B С) Это вызывает определенные неудобства, особенно, если тело функции представляет собой громоздкую запись. В Микро-Лиспе в отличие от Коммон - Лиспа, где такая возможность отсутствует, определение лямбда – выражения можно связывать с определенным именем, а затем вызывать это лямбда – выражение по имени как обычную именованную функцию: [3] (define second (lambda (l) (car (cdr l)))) SECOND [4] (second '(а b с)) B
Страницы
- « первая
- ‹ предыдущая
- …
- 15
- 16
- 17
- 18
- 19
- …
- следующая ›
- последняя »