
7. Функція як головний засіб написання програми в Ліспі. Способи визначення функції. Виклик функцій.
Функція - відображення між множинами.
Функцією в математиці називається відображення (mapping), яке однозначно відображає одні значення на інші. Наприклад, запис
y=f(x)
ставить у відповідність кожному елементу х з множини визначення (domain) єдиний елемент у з множини значень (range, codomain) функції f. Це відповідність також можна записати в наступному вигляді:
Будемо говорити, що функція f від аргументу х має значення y = f (x) (value, image). Біля функції може бути довільна кількість аргументів, у тому числі їх може не бути зовсім. Функція без аргументів має постійне значення. Наведемо приклади функцій:
abs(-3)
3 ;
абсолютная
величина
числа
+(2,3) 5 ; сумма
union((a,b),(c,b)) (a,b,c) ; объединение множеств
финский(John) ложь ; определение языка
дети(адам,ева) (каин,авель) ; множество детей
Тип аргументів і функцій
У загальному випадку функція може задавати відображення з декількох множин в множині значень. Для зображення типів (type) значень функції і її аргументів запозичимо ще одне прийняте в математиці позначення. Нехай f - функція від двох аргумен-тів:
f(x,y) z ; отображение пар элементов х,у в множество z
Типи аргументів х и у, а також тип значения z можна позначити наступним чином:
F:
А
В
С
Тут знак "×" між А і В позначає прямий добуток множин. Наведена запис означає, що тип першого аргументу функції f є А (тобто він належить множині А), тип другого аргументу - В і тип значення функції - С Функція f ставить у відповідність впорядкованим парам, утвореним з елементів множин А і В, елемент з множини С Наведемо типи значень і аргументів функцій з попереднього прикладу:
ФУНКЦИЯ АРГУМЕНТЫ ЗНАЧЕНИЯ
Abs: число -> число
+: число
->
число
union: множ-во множ-во -> множество
финский: слово -» логическое значение
дети: человек х человек -> множество людей
Визначення та виклик функції
Визначення (definition) функції в мові Лісп дозволяє задати довільне відображення, що обчислюється. Наприклад, функцію, яка обчислює суму квадратів, можна визначити за допомогою додавання і множення:
суммаквадратов:
аргументы: х,у
значение: х*х+у*у
Тут х і у змінні, що представляють довільні числа.
Виклик (call) функції означає запуск, або застосування (apply) визначення функції до конкретних значень аргументів. Наприклад, застосуємо функцію суммаквадратів до аргументів х = 2 і у = 3:
суммаквадратов(2,З) -> 13
Функція віклікається набором аргументів и повертає єдине значення. Визначення функції в Ліспі має наступний вигляд: (DEFUN name (arg1 arg2 ...) task1 task 2 . . . . . ) де name — ім’я функції, arg1, arg2, ... — аргументи (параметри). Тіло функції містить послідовність задач. Ключове слово DEFUN виникло з DEfine FUNction. $ (DEFUN FIRST (lst)$ (FIRST ‘(q w e r t y)) (CAR lst) ) q $ (DEFUN THIRD (lst)$ (THIRD ‘(q w e r t y)) (CADDR lst) ) e Визначимо функцію NULL, яка розпізнає порожній список. Вона повертає істину, якщо її аргументом є порожній список і хибність в іншому випадку. $ (DEFUN NULL (obj)$ (NULL ‘(q w e r)) $ (NULL (CDR ‘(r))) (EQL obj NIL) )FT Нам вже відомі три функції розпізнання: EQL, ATOM, NULL. Функції, які застосовуються для перевірки певних умов та можуть повертати лише два значення – істини чи хиби, називаються предикатами.