- •Введение
- •Понятие функционального программирования
- •Языки функционального программирования
- •Лямбда-исчисление Введение в лямбда-исчисление
- •Алонсо Черч
- •Иллюстрация ромбического свойства на примере
- •Прикладные лямбда-исчисления
- •Данные и выражения языка Lisp. Понятия списков и атомов, вычисление функций.
- •Организация памяти Lisp-машины
- •Функции проверки типов и логические функции
- •Манипуляция элементами списков
- •Основные конструкции Лямбда - выражения и пользовательские функции
- •Последовательности вычислений
- •Условные операторы и циклы
- •Рекурсия
- •Проверка на вхождения атома в список
- •Удаление из списка n-ного элемента
- •Добавление в список элемента в позицию n
- •Функционалы
- •Макросы
- •Ввод и вывод
- •Типы данных Иерархия типов
- •Символы
- •Последовательности
- •Массивы
- •Структуры
- •Лабораторные работы Лабораторная работа 1
- •Лабораторная работа 2
- •Лабораторная работа 3
- •Дана схема метрополитена, найти кратчайший путь между станциями.
- •Игра в 15.
- •Задача о 8-ми ферзях.
- •Задача о 8-ми ферзях 2.
- •Задача о Ханойской башне.
- •Задача о составлении расписания
- •Раскрасить плоскую карту четырьмя цветами, так что бы любые две смежные области не были окрашены в один цвет
- •Задача о коммивояжере.
- •Лабораторная работа 4
Лабораторная работа 4
Цель работы. Ознакомиться с применением функционалов в языке Lisp.
Указания. Используя связывание свойств с символами, структуры, последовательности и функционалы реализовать программу для предложенного ниже варианта, выполняющую:
включение/исключение/замену данных;
4-5 поисковых запроса (разработать самостоятельно и согласовать с преподавателем).
Расписание авиарейсов.
Железнодорожное расписание.
Купля/продажа/сдача/наем/обмен недвижимости.
Телефонный справочник организации.
Учет результатов экзаменационных сессий.
Учет технических осмотров автомобилей в автопарке.
Учет выданных книг в библиотеке.
Инвентаризация лабораторий университета: аудитории, установленная техника.
Маршруты городского транспорта.
Репертуар театров.
Котировки ценных бумаг.
Запись к врачам в поликлинике.
Проведение научной конференции.
Учет товаров на складе.
Учёт ошибок при разработке программного обеспечения
1 Частично рекурсивная функция – функция, зависящая от своего результата при других входных параметрах и, возможно, определённая не для всех входных данных.
2 Следует понимать разницу между чистым лямбда-исчислением и языками функционального программирования. Утверждение, что любая сформулированная на Lisp задача вычислима – неверно.
3 Считая для краткости, что and и or имеют произвольное число аргументов
4 Здесь и далее: символом > в примерах будет обозначаться приглашение консоли Lisp к вводу. В других реализациях этот символ может иметь иной вид, например, "USER[1]:" или "[1]>". Строки без символа > будут означать вывод программы на экран. Два символа > будут означать пользовательский ввод с клавиатуры. При написании кода (например, в случае проверки примеров) символ > не должен помещаться в текст. Также необходимо иметь в виду, что оператор в Lisp может записываться более чем на одной строке - место, в котором заканчивается оператор, может быть определено по закрывающей скобке, соответствующей самой первой открывающей.
5 Сразу оговоримся, что далеко не все версии Lisp выдерживают этот пример, в частности GNU Clisp просто зависает. Слегка модифицированный пример (NCONC (NCONC X X) X) привёл к зависанию даже тех версий Lisp, который выдержали исходный.
6 При этом запрещается экспериментировать с числом дисков, равным 64, так как если кому-либо это удастся, согласно легенде о ханойских башнях, наступит конец света
