- •1. Парадигмы императивного и декларативного программирования.
- •2. Основные задачи для функционального и логического программирования.
- •3. Основные понятия систем ии.
- •4. Понятие функционального программирования и основные положения по а.П. Ершову.
- •5. Понятие функциональности.
- •6. Понятие прозрачности по ссылкам.
- •7. Виды вычислений в функциональных языках.
- •10. Свойства функционального программирования в постановке а. П. Ершова.
- •11. Структура символьного выражения в Лиспе.
- •8. Понятие бестипового программирования.
- •9. Обзор функциональных языков программирования.
- •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. Металогические предикаты для определения типа переменных
4. Понятие функционального программирования и основные положения по а.П. Ершову.
Основы функционального программирования.
1)Тезисы А.П. Ершова.
2)Свойства функциональности
3)Виды вычислений
4)Обзор основных функциональных языков программирования.
Функциональное программирование - способ составления программы, при котором единственное действие - вызов функции. В функциональной программе существует 1 символ с заданным именем, структуры в ходе выполнения функциональной программы не удаляются, а только генерируются путем синтеза и анализа существующих структур.
А.П.Ершов сказал: «Способ составления программ, при котором:
- единственным действием является вызов функции;
- единственным способом расчленения программы на части является введение имени функции;
- единственным способом композиции является оператор суперпозиции;
- никаких ячеек памяти;
- ни операторов-присваивания;
- ни блок-схем;
- ни передач управления».
5. Понятие функциональности.
Свойство функциональности (прозрачность по ссылкам) означает, что результат работы функции не зависит от места программы в котором она вызвана, а зависит только от аргументов вызова.
Основное требование к программе – функциональность: значение функции зависит только от нее самой и аргумента вывода, но не зависит от места программы, в котором эта функция встречается (т.е. не должно быть обращения функции к глобальной переменной). Менее принципиальное свойство – бестиповость.
6. Понятие прозрачности по ссылкам.
Свойство функциональности (прозрачность по ссылкам) означает, что результат работы функции не зависит от места программы в котором она вызвана, а зависит только от аргументов вызова. Прозрачности по ссылкам (функциональность) означает, что каждое выражение языка определяет единственную величину, которую нельзя изменить ни путем вычисления, ни путем совместного использования различными функциями; в функциональных языках отсутствуют "побочные эффекты" - динамические изменения значений переменных в процессе вычислений.
Прозрачность ссылок достигается за счет явной передачи параметров по значению, в отличие от используемой в императивном стиле программирования возможности передачи ссылок на переменные. При этом оптимизационная работа, направленная на избежание избыточного копирования значений, перекладывается с программиста на компилятор, за счет чего удается избежать большого числа ошибок, появляющихся в результате многочисленных побочных эффектов при работе со ссылками.
7. Виды вычислений в функциональных языках.
Ленивые вычисления означают, что на каждом шаге вычисляется только то, что нужно для того, чтобы перейти к следующему шагу.
Энергичные вычисления – вычисляется всё, что может быть вычислено.
В энергичном случае вычисляется всё, что можно, а в ленивом – всё, что нужно.
Язык |Вычисления |наличие императивного включения |практичность |типизация|
Common Lisp|Энергичные |не чистый |практичен |без типов|
Sheme |Энергичные |не чистый |академичный |без типов|
Рефал |Ленивый |чистый |академичный |типизир. |
ML |Ленивый |не чистый |академичный |типизир. |
OCAL |Энергичные |чистый |академичный |типизир. |
Haskell |Ленивый |не чистый |академичный |типизир. |
F# |Ленивый |не чистый |академичный |типизир. |
Erlang |Энергичные |чистый |практичен |без типов|
C# |Энергичные |не чистый |практичен |типизир. |
