
- •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. Металогические предикаты для определения типа переменных
8. Понятие бестипового программирования.
Бестиповый язык предполагает, что переменные одновременно могут быть связаны с разными по типу объектами. Исторически первым языком был Лисп. Бестиповый язык программирования позволяет применять любые операции, определенные в нем, к любым данным, а все типы данных рассматриваются как последовательности битов различной длины. Примером бестиповых языков являются большинство языков ассемблера, а также несколько языков высокого уровня.
Бестиповые языки являются противоположностью типизированных языков. Бестиповые языки: Common Lisp, Erlang, Sheme и др.
9. Обзор функциональных языков программирования.
Критерии сравнения:
Практичность - использование языка программирования в реальных приложениях, наличие коммерческих компиляторов.
Академический - означает, что язык использовался только в научных приложениях, для обучения студентов, на нем нет реальных коммерческих разработок.
Типизация - статическая, динамическая. Строгая - тип переменной определяется до её использования. Динамическая - во время. Не строгая предполагает, что тип переменной определяется типом значения, которое заносится в неё. Безтиповая типизация.
Язык |Вычисления |наличие императивного включения |практичность |типизация|
Common Lisp|Энергичные |не чистый |практичен |без типов|
Sheme |Энергичные |не чистый |академичный |без типов|
Рефал |Ленивый |чистый |академичный |типизир. |
ML |Ленивый |не чистый |академичный |типизир. |
OCAL |Энергичные |чистый |академичный |типизир. |
Haskell |Ленивый |не чистый |академичный |типизир. |
F# |Ленивый |не чистый |академичный |типизир. |
Erlang |Энергичные |чистый |практичен |без типов|
C# |Энергичные |не чистый |практичен |типизир. |
10. Свойства функционального программирования в постановке а. П. Ершова.
Сущность функционального программирования определена А. П. Ершовым как «... способ составления программ, в которых единственным действием является вызов функции, единственным способом расчленения программы на части является введение имени для функции, а единственным правилом композиции — оператор суперпозиции функции. Никаких ячеек памяти, ни операторов присваивания, ни циклов, ни, тем более, блок-схем, ни передачи управления».
11. Структура символьного выражения в Лиспе.
(Символьные выражения) S-выр:
1.скалярные объекты (символы, числа, атомы). Примеры символов: Vmax, A753,S. Символ, который используется для представления константного объекта предметной области, называется атомом. Символы, которые используются для именования других объектов, называются переменными (числа - не переменные). Существуют 2 системно определенных атомов T & NIL, которые используются для обозначений логических значений "истина" и "ложь". Символ NIL используется для обозначения пустого списка.
2.структурные объекты (списки).
В лиспе принято единообразная префиксная нотация записи выражений. Все выражения записываются в круглых скобках. Одно и то же выражение, в зависимости от контекста, может выступать в разных ролях.
>(имя_функции аргумент1 аргумент2 ... аргументN)