Micro Lisp. Основные понятия, структуры и функции. Яшин Л.З. - 17 стр.

UptoLike

Составители: 

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