Математичною моделлю для функціонального програмування є лямбда-вирахування Черча.
Як правило, функція представляється як відображення однієї множини в іншу. У λ-вирахуванні функції у першу чергу розглядаються як математичні вирази щодо деяких параметрів. Як уже було сказано, тут, зокрема, визначаються λ-функції, які, власне кажучи, є анонімними функціями.
У чистому λ-вирахуванні функції мають тільки один аргумент, у розширеному λ-вирахуванні функції можуть мати кілька аргументів.
Розглянемо основи найбільш відомої мови функціонального програмування Lisp.
Мова програмування Lisp оперує з двома основними структурами даних – атомами і списками. Атоми і списки не є типами даних у тому значенні, яке надається типам в процедурних мовах програмування. У мові Lisp ці структури є способом представлення одних об’єктів через сукупність інших, більш простих.
Атом – елементарний об’єкт, який не може бути розбитий на складові. У програмі на Lisp атоми можуть позначати константи і функції, що мають фіксований зміст; визначені користувачем константи, змінні і функції; і, нарешті, атоми можуть позначати самих себе, тобто ті послідовності символів, якими атоми зображуються. Остання обставина дозволяє використовувати мову Lisp як базову мову під час організації символьних і аналітичних обчислень, тому що дає можливість працювати з об'єктами, яким не присвоєно ніякого конкретного значення. На відміну від змінної у процедурних мовах програмування атом являє собою спосіб маркування будь-якого об'єкта, припустимого в Lisp.
Приклади атомів: 3.14 , * , nil, book.
Атоми в Lisp можуть бути вільними або зв'язаними. Вільний атом позначає сам себе, тобто послідовність символів, що утворюють його ім'я.
Зв'язаний атом може позначати будь-який припустимий Lisp-вираз, атом або список. Установити деяке значення атома або змінити його можна функцією setq, наприклад:
(setq A 125).
Особливу роль у мові відіграють атоми T і NIL. У логічних виразах вони мають значення true і false відповідно. Крім того, атом NIL еквівалентний порожньому спискові.
Списки є основною структурою даних мови Lisp. За допомогою списків можна представити практично будь-який математичний об'єкт: множину, тензор, граф, і т.д. Функції також можуть бути подані у вигляді списку. Останнє твердження має важливі наслідки, тому що будь-яка програма мовою Lisp є якою-небудь функцією, що може мати своїм значенням список, який представляє іншу функцію. Таким чином, виконання програми на Lisp може породжувати нову програму.
Списком називається послідовність елементів, взятих у дужки, елементом списку може бути або атом, або список.
Приклади списків: (1 2 3), (name price), (a(b c)), ( ).
У вигляді списків записуються виклики функцій, наприклад: (sum 1 2 3), (+ 5 7).
У вигляді списків можна подати предикати:
(and (предикат 1) (предикат 2)).
Розглянемо основні функції мови Lisp. Оскільки основними структурами є списки, основними функціями мови є функції роботи зі списками.
Функція list повертає список, складений із значень своїх аргументів. Наприклад:
(list 1 2 3) --> (1 2 3).
Тут і далі стрілка --> буде позначати результат виконання функції.
Функція nth вибирає 1-й елемент списку, наприклад:
(nth 0 ' (a b c)) --> a .
Апостроф перед дужками запобігає оцінюванню виразу (a b c).
Функція length повертає довжину списку, наприклад:
(length (a b c d)) --> 4 .
Функція member перевіряє, чи є елемент членом списку, наприклад:
(member 7 ' (1 2 3)) --> nil .
Функція car повертає перший елемент списку, наприклад:
(car ' (a b c)) --> a .
Функція cdr повертає цей самий список після видалення 1-го елемента, наприклад:
(cdr ' (a b c)) --> (b c) .
Функція cons додає до списку новий елемент. Другий аргумент функції – список, перший аргумент додається до початку списку, наприклад:
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.