- •1.2. Алгоритм
- •1.3. Предмет науки програмування
- •1.4. Застосування мов програмування
- •1.5. Стандартизація мов програмування
- •1.6. Середовище розробки
- •1.7. Тестування і верифікація програм
- •Лекція 2. Алгоритми і обчислення
- •2.1. Алгоритми
- •2.2. Обчислювальні машини
- •2.3. Основи фон-нейманівської архітектури
- •Лекція 3. Парадигми програмування
- •3.1. Базові парадигми програмування
- •Процедурне програмування
- •Абстрактна семантика процедурних програм.
- •Денотаційна семантика.
- •Операційна семантика
- •Структурність і модульність
- •3. 3. Модульне програмування
- •3.4. Об’єктно-орієнтовне програмування
- •3.5. Функціональне програмування
- •3.6. Логічне програмування
- •3.6. Алгебраїчна парадигма
- •Висновок
- •Лекція 4. Огляд основних мов програмування
- •4.1. Мова Picmkalkul Конрада Цузе
- •4.1.1. Історичні передумови
- •4.1.2. Огляд мови
- •4.2. Мінімальне програмування на апаратному рівні: псевдокоди
- •4.2.1. Мова Short Code
- •4.2.2. Система Speedcoding
- •4.2.3. Система "компіляції" univac
- •4.2.4. Суміжна робота
- •4.3. Комп'ютер ibm 704 і мова fortran
- •4.3.1. Історична ретроспектива
- •4.3.2. Процес розробки
- •4.3.3. Огляд мови fortran I
- •4.3.4. Огляд мови fortran II
- •4.3.5. Мови fortran IV, fortran 77 і fortran 90
- •4.4. Функціональне програмування: мова lisp
- •4.4.1. Витоки робіт в області штучного інтелекту та обробка списків
- •4.4.2. Процес розробки мови lisp
- •4.4.3. Огляд мови
- •4.4.5. Два нащадки мови lisp
- •4.4.6. Споріднені мови
- •4.5. Перший крок до удосконалення: мова algol 60
- •4.5.1. Історична ретроспектива
- •4.5.2. Початкова стадія розробки
- •4.5.3. Огляд мови algol 58
- •4.5.4. Прийняття звіту про мову algol 58
- •4.5.5. Процес розробки мови algol 60
- •4.5.6. Огляд мови algol 60
- •4.5.7. Оцінка мови algol 60
- •Лекція 5. Трансляція і формальні граматики
- •5.1. Транслятори
- •5.2. Процес трансляції
- •5.3. Формальні граматики. Нбф-граматика
- •Лекція 6. Java - мова ооп
- •6.2. Основні властивості програм і перші приклади
- •6.3. Арифметичні і побітові оператори мови Java
4.4.5. Два нащадки мови lisp
У наш час широко використовуються два діалекти мови LISP — мова COMMON LISP і мова Scheme. Обидві коротко розглянуті в наступних підрозділах.
4.4.5.1. Мова Scheme
Мова Scheme була розроблена в інституті MIT у середині 1970-х років (Sussman and Steele, 1975). Для неї характерний невеликий розмір, використання винятково статичного огляду даних (розглянутого в главі 4), а також обробка функцій як об'єктів першого класу. Таким чином, функції мови Scheme можуть бути значеннями виразів і елементами в списках, присвоюватись змінним, передаватися як параметри і повертатися як результат застосування функції до своїх аргументів. У ранніх версіях мови LISP усіх цих можливостей не було, крім того, у них не використовувався статичний огляд даних.
Як невелика мова з простими синтаксисом і семантикою мова Scheme цілком придатна для таких навчальних додатків, як курси функціонального програмування і загальні вступні курси програмування. Докладніше мова Scheme описується в главі 14.
4.4.5.2. Мова COMMON LISP
Мова COMMON LISP (Steele, 1984) була створена у спробі об'єднати в одній мові властивості декількох діалектів мови LISP, розроблених на початку 1980-х років, у тому числі і мови Scheme. Будучи такою комбінацією, мова COMMON LISP являє собою велику і складну структуру. Проте його основою є чиста мова LISP, так що його синтаксис, основні функції і принципова природа походять від цієї мови.
Визнавши гнучкість, забезпечувану динамічним оглядом даних, і простоту, надану статичним оглядом, розробники мови COMMON LISP використовували обидва способи. За замовчуванням використовується статичний огляд змінних, але якщо оголосити змінну як special, її область видимості стає динамічною.
Мова COMMON LISP містить велику кількість типів і структур даних, серед яких записи, масиви, комплексні числа і рядки символів. Також у ній є форма пакетів, яка використовується, щоб зібрати в єдине ціле набору функцій і даних, яка забезпечує, таким чином, керування доступом.
До мови COMMON LISP ми ще повернемося в главі 14.
4.4.6. Споріднені мови
Мова ML (Metalanguage) була створена у 1980-х роках Робіном Мілнером (Robin Milner) у Единбурзькому університеті як метамова для системи верифікації програм, що називалася Logic for Computable Function (LCF) (Milner at al., 1990). Головним чином, мова ML — це мова функціонального програмування, але вона підтримує також імперативне програмування. У мові ML функції є більш загальними, ніж в імперативних мовах: вони передаються між підпрограмами як параметри, можуть бути поліморфними, що означає можливість одержання параметрів різних типів при різних викликах. На відміну від мов LISP і Scheme, тип кожної змінний і кожного виразу мови ML може визначатися в процесі компіляції. Типи зв'язуються з об'єктами, а не з іменами. Типи виразів логічно виводяться з контексту виразів, як це показано в главі 6.
На відміну від мов LISP і Scheme, мова ML не використовує функціональний синтаксис з дужками, який виник разом з лямбда-виразами. Синтаксис мови ML скоріше схожий на синтаксис таких імперативних мов, як Pascal і C.
Мова Miranda була розроблена Девідом Тернером (David Turner) в Університеті Кента в Кентербері, Великобританія (University of Kent in Canterbury), на початку 1980-x (Turner, 1986). Ця мова частково основана на мовах ML, SASL і KRC. Мова Miranda значною мірою стала базою для створення мови Haskell (Hudak and Fasel, 1992), яка подібно мові Miranda, є чисто функціональною мовою, тобто не містить ні змінних, ні операторів присвоєння. Ще однією характерною рисою мови Haskell є використання "ледачого" обчислення. Жоден вираз не обчислюється доти, поки не буде потрібно його значення, що веде до декількох несподіваних можливостей мови.
Мови ML і Haskell коротко описуються в главі 14.
