
- •1. Особенности программирования на функциональном языке. Основные элементы языка лисп. Определения атомов, s-выражений, списков.
- •2. Понятие функции. Префиксная форма записи функций и арифметических выражений. Функция quote.
- •3. Базовые функции: car, cdr, atom, eq, cons. Модификации функции eq.
- •4. Значения символов. Псевдофункции set и setq. Универсальная функция eval.
- •5. Внутреннее представление списков. Логическое и физическое равенство списков. Точечная пара.
- •7. Создание локальной связи с помощью формы let и let*. Эквивалентное представление формы через λ-вызов.
- •8. Разветвление вычислений через формы cond и if. Особенности вычисления логических функции not,and,or.
- •9. Ввод и вывод в лисПе. Функции read,print,prin1, princ, terpri, format.
- •10. Работа с файлами в лиспе.
- •15. Понятие функций высших порядков; функционалы и функции с функциональным значением.
- •16. Встроенные применяющие функционалы apply и funcall и их использование в определении интерпритаторов и функционалов пользователя.
- •17. Отображающие функционалы. Два вида map-функций. Mapcar и maplist.
- •18. Определение типа структура. Создание объектов структурного типа. Функции доступа к полям объекта типа структура.
- •19. Макропрограммирование в лиспе. Определение макроса. Последовательность выполнения макровызова. Обратная блокировка и определение новых синтаксических форм.
15. Понятие функций высших порядков; функционалы и функции с функциональным значением.
Функция высшего порядка – это функция, которая в качестве аргумента может использовать любую функцию либо результатом ее выполнения является некая функция.
Аргумент, значением которого является функция, называется функциональным аргументом. Функция высшего порядка с функциональным аргументом называется функционалом.
Функция с функциональным значением: (funcall (uvel 3) 14) 17
16. Встроенные применяющие функционалы apply и funcall и их использование в определении интерпритаторов и функционалов пользователя.
APPLY – применяет функцию к списку аргументов.
(apply fn список)
Fn – функциональный аргумент
При вызове фактическим значением fn может быть имя встроенной функции или определенной пользователем функции, лямбда выражение, а также любая вычисляемая форма значением которой является функциональный объект.
(apply (car'(+ * / -)) '(2 3))
5
FUNCALL аналогичен APPLY, но аргументы для вызываемой функции принимает не списком, а по отдельности.
(funcall fn x1x2x3…xn)
(funcall ‘+ 2 3)
5
(funcall ‘cons 2 3)
(2 . 3)
17. Отображающие функционалы. Два вида map-функций. Mapcar и maplist.
Отображающие функционалы, являются функциями, которые некоторым образом отображают список-аргумент в новый список.
В общем случае вызов MAP-функции имеет вид: (MAPx fn x1x2…xn)
Количество списков в вызове функции должно совпадать с предусмотренным количеством аргументов функции fn.
MAPCAR – повторяет вычисление функции fn на элементах списков. Значение функции вычисляется путем последовательного применения функции fn к элементам списков x1,x2,x3,…xn. Например в случае одно списка вызов функции имеет вид: (MAPCAR f x)
В качестве значения функционала возвращается список, построенный из результатов применения функционального аргумента fn к элементам исходного списка.
MAPLIST – эта функция повторяет вычисление заданной функции на хвостовых частях списка. MAPLIST действует подобно MAPCAR , но действия осуществляет не над элементами списка, а над последовательностями “cdr” этого списка, начиная с исходного.
18. Определение типа структура. Создание объектов структурного типа. Функции доступа к полям объекта типа структура.
Определение структурного типа: (defstruct имя_структуры поле1…полеn)
Объекты определенного типа создаются формой (make-имя_структуры)
Для каждого поля существует функция доступа, имя которой образуется из имени типа и имени поля, разделенных дефисом: (студент-факультет х)
Можно присвоит другое значение конкретному полю функцией setf.
19. Макропрограммирование в лиспе. Определение макроса. Последовательность выполнения макровызова. Обратная блокировка и определение новых синтаксических форм.
Макросы – это специальные программные средства которые дают возможность расширить синтаксис и семантику языка. С их помощью можно создавать новые вычислительные формы и писать компактные программы.
Определение: (defmacro имя λ-список тело)
Вызов: (имя аргументы) – макровызов
Вычисление макроса отличается от вычисления функции. Отличия:
1. Макрос при вызове не вычисляет свои аргументы.
2. Тело макроса вычисляется дважды. Сначала вычисляется тело с аргументами. Затем полученная форма автоматически вычисляется еще раз.
Обратная блокировка:
Используется для более удобного способа создания макроса.
Внутри обратно блокированного выражения можно локально отменять блокировку.