Функції виводу, Детальна інформація
Функції виводу
lambda (x1, x2, ..., xn) . f
В Ліспі лямбда вираз має вигляд:
(LAMBDA (x1 x2 ... xn) f)
Символ LAMBDA говорить нам про визначення функції. Символи xi – це формальні параметри, f – тіло функції. Тілом функції може бути довільна форма, значення якої може обчислити інтерпретатор Ліспа. Функцію, яка обчислює суму квадратів двох чисел, можна визначити так:
(LAMBDA (x y) (+ (* x x) (* y y)) )
Формальність параметрів вказує на те, що ми можемо замінити їх на інші символи, але від цього не зміниться сутність обчислення функції.
Лямбда вираз – це визначення обчислення та параметрів функції в чистому вигляді без фактичних параметрів або аргументів. Для застосування такої функції до певних аргументів, необхідно поставити лямбда вираз на місце імені функції:
(лямбда-вираз a1 a2 ... an)
Тут ai – форми, що задають фактичні параметри.
Наприклад, множення (* 3 4) можна записати з використанням лямбда виклику:
$ ((LAMBDA (x y) (* x y)) 3 4)
12
Наступний виклик будує список з двох аргументів:
$ ((LAMBDA (x y) (CONS x (CONS y NIL))) ‘dog ‘cat)
(dog cat)
Таку форму виклику називають лямбда викликом. Обчислення лямбда виклику відбувається в два етапи. Спочатку обчислюються значення фактичних параметрів та відповідні формальні параметри зв’язуються з отриманими значеннями. На другому етапі обчислюється форма, яка є тілом лямбда виразу. Отримане значення повертається в якості значення лямбда виклику. По завершенню обчислення формальним параметрам повертаються зв’язки , які існували до лямбда виклику. Весь цей процес називається лямбда перетворенням.
Пам’ятайте, що лямбда вираз без фактичних параметрів є лише визначення, а не форма, яку можна обчислити. Сам по собі лямбда вираз інтерпретатором не сприймається. Якщо ви введете: (LAMBDA (x y) (CONS x (CONS y NIL))), то інтерпретатор Ліспу видасть повідомлення про помилку.
Лямбда вираз є як чисто абстрактним механізмом для визначення та опису обчислення, так і механізмом для зв’язування формальних та фактичних параметрів під час виконання обчислення. Лямбда вираз є функцією без імені.
Ми вже говорили про те, як визначити нову функцію – це можна здійснити за допомогою функції DEFUN. Визначення функції викликається так:
(DEFUN <і’мя> <лямбда вираз>)
Для спрощення опустимо зовнішні дужки у лямбда виразі та сам атом LAMBDA. Тоді ми отримаємо знайоме нам визначення функції. Наступні визначення еквівалентні:
(DEFUN list2 (LAMBDA (x y) (CONS x (CONS y NIL))))
та
(DEFUN list2 (x y) (CONS x (CONS y NIL)))
Функція DEFUN з‘єднує символ з лямбда виразом, після чого символ починає іменувати обчислення, яке визначається лямбда виразом. Значенням функції DEFUN є ім’я нової функції.
За допомогою структури LET, яка визначена в common.lsp, можна утворити локальний звя’зок. Значення змінним форми LET присвоюються одночасно. Ця структура має наступний вигляд:
(LET ((m1 a1) (m2 a2) ... (mN aN)) <форма1> <форма2> ... <формаN>),
яка в дійсності є лямбда викликом, де формальні та фактичні параметри знаходяться разом на початку структури:
((LAMBDA (m1 m2 ... mN) <форма1> <форма2> ... <формаN>) a1 a2 ... aN)
Наступні виклики еквівалентні:
В Ліспі лямбда вираз має вигляд:
(LAMBDA (x1 x2 ... xn) f)
Символ LAMBDA говорить нам про визначення функції. Символи xi – це формальні параметри, f – тіло функції. Тілом функції може бути довільна форма, значення якої може обчислити інтерпретатор Ліспа. Функцію, яка обчислює суму квадратів двох чисел, можна визначити так:
(LAMBDA (x y) (+ (* x x) (* y y)) )
Формальність параметрів вказує на те, що ми можемо замінити їх на інші символи, але від цього не зміниться сутність обчислення функції.
Лямбда вираз – це визначення обчислення та параметрів функції в чистому вигляді без фактичних параметрів або аргументів. Для застосування такої функції до певних аргументів, необхідно поставити лямбда вираз на місце імені функції:
(лямбда-вираз a1 a2 ... an)
Тут ai – форми, що задають фактичні параметри.
Наприклад, множення (* 3 4) можна записати з використанням лямбда виклику:
$ ((LAMBDA (x y) (* x y)) 3 4)
12
Наступний виклик будує список з двох аргументів:
$ ((LAMBDA (x y) (CONS x (CONS y NIL))) ‘dog ‘cat)
(dog cat)
Таку форму виклику називають лямбда викликом. Обчислення лямбда виклику відбувається в два етапи. Спочатку обчислюються значення фактичних параметрів та відповідні формальні параметри зв’язуються з отриманими значеннями. На другому етапі обчислюється форма, яка є тілом лямбда виразу. Отримане значення повертається в якості значення лямбда виклику. По завершенню обчислення формальним параметрам повертаються зв’язки , які існували до лямбда виклику. Весь цей процес називається лямбда перетворенням.
Пам’ятайте, що лямбда вираз без фактичних параметрів є лише визначення, а не форма, яку можна обчислити. Сам по собі лямбда вираз інтерпретатором не сприймається. Якщо ви введете: (LAMBDA (x y) (CONS x (CONS y NIL))), то інтерпретатор Ліспу видасть повідомлення про помилку.
Лямбда вираз є як чисто абстрактним механізмом для визначення та опису обчислення, так і механізмом для зв’язування формальних та фактичних параметрів під час виконання обчислення. Лямбда вираз є функцією без імені.
Ми вже говорили про те, як визначити нову функцію – це можна здійснити за допомогою функції DEFUN. Визначення функції викликається так:
(DEFUN <і’мя> <лямбда вираз>)
Для спрощення опустимо зовнішні дужки у лямбда виразі та сам атом LAMBDA. Тоді ми отримаємо знайоме нам визначення функції. Наступні визначення еквівалентні:
(DEFUN list2 (LAMBDA (x y) (CONS x (CONS y NIL))))
та
(DEFUN list2 (x y) (CONS x (CONS y NIL)))
Функція DEFUN з‘єднує символ з лямбда виразом, після чого символ починає іменувати обчислення, яке визначається лямбда виразом. Значенням функції DEFUN є ім’я нової функції.
За допомогою структури LET, яка визначена в common.lsp, можна утворити локальний звя’зок. Значення змінним форми LET присвоюються одночасно. Ця структура має наступний вигляд:
(LET ((m1 a1) (m2 a2) ... (mN aN)) <форма1> <форма2> ... <формаN>),
яка в дійсності є лямбда викликом, де формальні та фактичні параметри знаходяться разом на початку структури:
((LAMBDA (m1 m2 ... mN) <форма1> <форма2> ... <формаN>) a1 a2 ... aN)
Наступні виклики еквівалентні:
The online video editor trusted by teams to make professional video in
minutes
© Referats, Inc · All rights reserved 2021