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

UptoLike

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

18
[5] (second '(1 (b с) 2))
(B С)
Форма LET
Другой разновидностью лямбдаисчисления в Лиспе является форма LЕТ,
которая имеет вид:
(LET ((V1 A1) (V2 А2)... (Vn An)) S1 S2... Sm),
где Vi, Ai, Si имеют такой же смысл как и в лямбдапреобразовании.
По сути форма LЕТ является синтаксическим видоизменением лямбда
преобразования, в которой пары формальных и фактических параметров помещены в
начале формы.
Оформление вычисления второго элемента в списке(А В С) используя форму
LЕТ:
[6] (let ((l '(а b с))) (cadr l))
B
Форму LЕТ, подобно лямбдапреобразованию, можно использовать для
вычисления именованной функции при ее определении:
[7] (define (second1 l) (let ((l l)) (cadr l)))
SECOND1
[8] (second1 '(1 (b с) 2))
(B С)
Если в форме LЕТ имеется несколько пар формальных и фактических
параметров, то связь между соответствующими переменными и их значениями
устанавливается одновременно.
Последовательная форма LET*
Если вычислять с помощью формы LЕТ приведенный ниже пример, выйдет
ошибка: не связанный атом Х:
[9] (let ((х 1) (у (* 2 х))) (list х у))
[VM ERROR encountered!]
В то же время так называемая последовательная форма LЕТ*, в которой связи
между переменными и их значениями устанавливаются последовательно,
примененная в этом примере, даст нормальный результат:
[10] (let* ((х 1) (у (* 2 х))) (list х у))
(1 2)
                                            18

        [5] (second '(1 (b с) 2))
        (B С)

Форма LET
      Другой разновидностью лямбда – исчисления в Лиспе является форма LЕТ,
которая имеет вид:
       (LET ((V1 A1) (V2 А2)... (Vn An)) S1 S2... Sm),
где Vi, Ai, Si имеют такой же смысл как и в лямбда – преобразовании.
      По сути форма LЕТ является синтаксическим видоизменением лямбда–
преобразования, в которой пары формальных и фактических параметров помещены в
начале формы.
       Оформление вычисления второго элемента в списке ‘(А В С) используя форму
LЕТ:
        [6] (let ((l '(а b с))) (cadr l))
        B


      Форму LЕТ, подобно лямбда–преобразованию, можно использовать для
вычисления именованной функции при ее определении:
       [7] (define (second1 l) (let ((l l)) (cadr l)))
       SECOND1
       [8] (second1 '(1 (b с) 2))
       (B С)


      Если в форме LЕТ имеется несколько пар формальных и фактических
параметров, то связь между соответствующими переменными и их значениями
устанавливается одновременно.

Последовательная форма LET*
     Если вычислять с помощью формы LЕТ приведенный ниже пример, выйдет
ошибка: не связанный атом Х:
       [9] (let ((х 1) (у (* 2 х))) (list х у))
       [VM ERROR encountered!]


      В то же время так называемая последовательная форма LЕТ*, в которой связи
между переменными и их значениями устанавливаются последовательно,
примененная в этом примере, даст нормальный результат:
       [10] (let* ((х 1) (у (* 2 х))) (list х у))
       (1 2)