
- •1. Парадигмы императивного и декларативного программирования.
- •2. Основные задачи для функционального и логического программирования.
- •3. Основные понятия систем ии.
- •4. Понятие функционального программирования и основные положения по а.П. Ершову.
- •5. Понятие функциональности.
- •6. Понятие прозрачности по ссылкам.
- •7. Виды вычислений в функциональных языках.
- •8. Понятие бестипового программирования.
- •9. Обзор функциональных языков программирования.
- •10. Свойства функционального программирования в постановке а. П. Ершова.
- •11. Структура символьного выражения в Лиспе.
- •12. Символы, атомы, константы, t, nil, списки.
- •13. Список как основная структура функционального и логического программирования.
- •14. Префиксная нотация Лиспа, вычисление арифметических выражений.
- •15. Понятие псевдофункции.
- •16. Псевдофункция статического связывания объекта.
- •17. Функция eval.
- •18. Функция quote.
- •19. Символьные выражения Лиспа.
- •20. Символьные выражения Пролога и Эрланга
- •21. Основные примитивы Лиспа для обработки списка.
- •22. Графическое представление списка.
- •23. Принципы работы с памятью функциональной и логической программы
- •24. Автоматические сборщики мусора
- •25. Старт-стопные сборщики мусора и сборщики мусора реального времени
- •26. Список в Эрланге, конструктор списка
- •27. Образец, сопоставление с образцом
- •28. Выделение элементов списка в Эрланге с помощью примитивов.
- •29. Выделение элементов списка в Эрланге с использованием образцов
- •30. Порядок вычисления лямбда выражений
- •31. Функция определения функций (связывание символов)
- •Ключевой параметр optional, key, res.
- •33. Карринговая форма записи функций нескольких переменных.
- •Формы организации временного контекста (let/let*).
- •Последовательная и одновременная передача параметров вычисляемой формы.
- •Форма организации условных вычислений cond.
- •37. Последовательные вычисления в Лиспе.
- •42. Классификация и виды рекурсии.
- •43. Рекурсия по аргументу, пример
- •44. Рекурсия по значению, пример
- •45. Параллельная рекурсия
- •46. Косвенная рекурсия, пример
- •47. Реализация рекурсивного вызова, функция трассировки в Лиспе
- •48. Функция принадлежности аргумента списка, декларативное определение
- •49. Эффективность рекурсивного и итерационного процесса.
- •50. Хвостовая рекурсия
- •51. Понятие функции высокого порядка
- •52. Применяющий функционал Лиспа
- •53. Обобщение вычислений посредством использования функций высокого порядка
- •54. Отображающие функционалы
- •55. Понятие лексического замыкания, формы организации лексического замыкания
- •56. Генератор в программировании, понятие вычислительного контекста
- •57. Связь дисциплины логического программирования с дисциплиной "базы данных"
- •58. Cвязь логического программирования с искусственным интеллектом
- •59. Логическое программирование и функциональное программирование
- •60. Логическое программирование и параллельное программирование
- •61. Логическая теория Фреге и значение её для логического программирования.
- •62. Теория Френча и Эрбрана и значение её для логического программирования.
- •63. Теория Тьюринга, значение для логического программирования.
- •64. Дизъюнкт Хорна
- •65. Резолюция, правило резолюции как процедура вывода решений
- •66. Сопоставление в логическом программировании
- •67. Понятие инверсных вычислений
- •68. Структура терма
- •69. Переменная, конкретизация переменных
- •70. Атом
- •71. Структура, функтор, компоненты
- •72. Факты, пример записи фактов
- •73. Правило, пример записи правила
- •74. Процедура вывода решения, как процедура доказательства теоремы
- •75. Поиск с возвратом
- •76. Сопоставление термов
- •77. Операционная модель машины вывода Пролога
- •78. Операторная нотация в прологе
- •79. Определение оператора и его свойства.
- •80. Пример "естественной языковой" записи программы на Прологе.
- •81. Оператор присваивания в прологе
- •82. Детерминированные и недетерминированные предикаты
- •83. Отсечение, операционная модель Пролога в случае применения отсечения.
- •84. Операционная семантика Пролога при использовании сечения
- •85. Подцель, терпящая неудачу
- •86. Запись списка в виде структуры
- •87. Традиционная форма записи списка
- •88. Рекурсивное логическое программирование
- •89. Запись фактов, записи рекуррентных определений
- •95. Организация ввода/вывода в прологе
- •96. Предикат открытия и чтения текущего входного потока
- •97. Предикат открытия и записи текущего выходного потока
- •98. Перемещение терма во внешнюю память базы данных
- •99. Организация работы с динамической базой данных
- •100. Предикат assert для перемещения фактов и правил
- •101. Constraint программирование: наложение ограничений и виды ограничений
- •102. Классификация Constraint систем логического программирования
- •103. Стандартные предикаты Constraint систем программирования
- •104. Множественные предикаты. Описание компонентов
- •105. Металогические предикаты
- •106. Металогические предикаты для анализа структуры термы
- •107. Металогические предикаты для определения типа переменных
28. Выделение элементов списка в Эрланге с помощью примитивов.
hd(X)- Голова списка Х - аналог car tl(X)- Хвост списка Х - - аналог cdr
29. Выделение элементов списка в Эрланге с использованием образцов
Как и из всего остального, мы можем извлекать элементы из списка с помощью
оператора сопоставления по образцу. Если у нас имеется не пустой список L , тогда
выражение [X|Y]=L , где Х и У - это несвязанные переменные, поместит голову списка
в Х, а хвост списка - в У.
30. Порядок вычисления лямбда выражений
Лямбда-выражение пришло из математической теории под названием "Лямбда - исчисление Чёрча". Лямбда - выражение - это анонимная функция, т.е. не имеющее названия.
(lambda (x) (* x 2)) - лисп
Лx.(*x 2) - Чёрч
Само лямбда-выражение не является вычислимым и приведет к ошибки при подачи его на интерпретатор.
Как применять:
((lambda (p1 p2 ... pn) F) f1 f2 ... fn)
Порядок вычисления соответствует энергичной стратегии вычисления, принятой в лиспе:
1)Вычисляются f1 f2 fn
2)Формальные и фактические параметры связываются
3)вычисляется форма
4)возвращается значение вычисления
5)связи возвращаются в первоначальное состояние
31. Функция определения функций (связывание символов)
Значения символов хранятся в ячейках, закрепленных за каждым символом. Если в эту ячейку положить значение, то символ будет связан (bind) сo значением. В процедурных языках говорят "будет присвоено значение".
Для Лиспа есть отличие:
Не оговаривается, что может храниться в ячейке: целое, атом, список, массив и т.д. В ячейке может храниться, что угодно.
С символом может быть связана не только ячейка со значением, а многие другие ячейки, число которых не ограничено.
Для связывания символов используется три функции: SET, SETQ , SETF
1) SET: связывает символ со значением, предварительно вычисляя значения аргументов. В качестве значения функция SET возвращает значение второго аргумента.
2) SETQ: аналогична SET, но не вычисляет значение первого аргумента. Буква q на блокировку.
3) SETF: действует аналогично SETQ, но может использоваться для присвоения символу не только значения.
Ключевой параметр optional, key, res.
В языке Lisp различают, кроме обычных, обязательных и позиционных, — необязательные (факультативные), ключевые и серийные (многократные, с переменным числом значений) параметры. Виды параметров обозначаются пометкой &optional, &key и &rest соответственно, размещаемой перед параметрами в lambda списке формальных аргументов. При этом серийный параметр должен быть последним в списке. Необязательный параметр может иметь начальное значение, устанавливаемое по умолчанию, т.е. если этот параметр не задан при вызове функции.
Ключевые параметры, являясь необязательными, не зависят еще и от порядка вхождения в список аргументов.
33. Карринговая форма записи функций нескольких переменных.
Карринговая форма записи функции - конкатенация нескольких функций. Является частью лямбда-исчислений чёрча. Можно и в ленивых и в энергичных исчислениях. Только в энергичных исчислениях практически ничего не даёт.
Функция двух переменных x и y f(x,y) = x + y может быть рассмотрена как функция одной переменной x, возвращающая функцию одной переменной y, то есть как выражение ?x.?y.x+y Такой приём работает точно так же для функций любой арности. Это показывает, что функции многих переменных могут быть без проблем выражены в ?-исчислении. Описанный процесс превращения функций многих переменных в функцию одной переменной называется карринг (также: каррирование), в честь американского математика Хаскелла Карри.