- •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. Металогические предикаты для определения типа переменных
Формы организации временного контекста (let/let*).
let служит для одновременного присваивания значений нескольким переменным.
Контекстом называется переменная и её связь в данный момент времени.
(let ((p1 f1)(p2 f2)...(pn fn)) F)
(let* ((p1 f1)(p2 f2)...(pn fn)) F)
В начальный момент времени вычисляются фактические параметры и связываются с формальными а)одновременно c let б) последовательно с let*. Далее вычисляется значение формы F.
>(let ((x 5)(y 10)) (+ x y))
15
>(let ((x 5)(y (*x 2))) (+ x y))
ошибка. x ещё не связан
>(let* ((x 5)(y (*x 2))) (+ x y))
15
Последовательная и одновременная передача параметров вычисляемой формы.
В начальный момент времени вычисляются фактические параметры и связываются с формальными а)одновременно c let б)последовательно с let*. Далее вычисляется значение формы F.
>(let ((x 5)(y 10)) (+ x y))
15
>(let ((x 5)(y (*x 2))) (+ x y))
ошибка. x ещё не связан
>(let* ((x 5)(y (*x 2))) (+ x y))
15
Форма организации условных вычислений cond.
cond-выражение - форма организации ветвящихся выражений в лиспе. Каждый аргумент функции COND должен быть списком ровно из двух элементов.
(cond
(p1 f11 f12...f1n)
(p2 f21 f22...f2n)
(pl fl1 fl2...fln)
)
)
)
37. Последовательные вычисления в Лиспе.
Последовательно вычисляются предикаты p1,p2,pl, до тех пор пока значение какого либо предиката не будет отлично от него. Если такой предикат найден не будет, то вернётся NIL. Если предикат p2 найдет, то вычисляется последовательно fij, и значение последней формы возвращается в качестве всего выражения. Последовательность форм может отсутствовать, тогда возвращается значение соответствующего предиката.
(defun f(x)
(cond
((<= x -3)(+ x 3))
( (and(> x -3)(< x 0)) (* x x))
( (and(> x 0)(<= x 5)) (sqrt x))
(t (+(*x x) 100))
)
)
)
Помимо формы cond в lisp'е существует целый ряд других форм, организующих ветвление. Наиболее популярные формы - форма if, организующая ветвление на 2 направление. Форма case, обеспечивающая порядок между ветвями.
(if pred fthen felse)
(prog1 f1 f2 ... fk)
(prog2 f1 f2 ... fk)
(progn f1 f2 ... fk)
38. Формы организации циклических вычислений do и do*.
Do и Do*
(do
((v1 v10 f1) (v2 v20 f2)...(vn vn0 fn)) v1 - переменная цикла, v10 - начальное значение, f1 - форма изменения переменной v1
(p fp1 fp2 ... fpn) - ветвь выхода из цикла. p - предикат, в случае истинности которого вычисляются fp1, fp2 ... fpn и значение последнего возвращается как результат работы всего выражения
F1 F2 Fk - последовательность форм, тело цикла
39. Принципы работы по организации ввода-вывода в Лиспе.
Изначально интерпретатор создает два потока: ввода и вывод. Они связаны с консолью. Если необходимо связать вывод с файлом, то необходимо перенаправить соответствующий выдоной поток на файл. Программы функциональные и логические работают только с текстовыми файлами соответственно в последовательном режиме ввода-вывода.
(setq p
(open _filename_ :direction)
)
(print p x y)
40. Рекуррентные отношения.
Рекурсивная функция предполагает, что задача, с помощью рекурентных отношений, может быть описана, и известно решение для простых "условий". f(n)->f(m) n>m; f(n)=n*f(n-1) f(1)=1; Простая предполагает наличие явного вызова функции в её теле. Пример: >(nth 3 '(a b c d e f)) d >(defun nth (p list) (cond((nil list) list); ((p 0) (car list)); (t (nth (- p 1) (cdr list)) ))
41. Примитивные рекурсивные функции
К примитивно рекурсивным относятся функции, которые могут быть получены из определенных базовых функций применением конечного числа операций композиции и рекурсии.
В качестве исходных функций обычно применяются нуль-функция, функция проецирования и функция последования. Нуль-функция имеет значение ноль на всей области определения. Функция проецирования выделяет элемент последовательности, а функция последования генерирует очередной элемент последовательности. Классическим примером примитивно рекурсивных функций является функция, вычисляющая факториал числа. Рекурсивное определение функции, вычисляющей факториал числа, практически повторяет его математическое представление. Лисповское определение функции следующее.
>(defun fact (n)
(cond
((= n 0) 1)
(t (* n (fact (- n 1)))))
)
FACT
>(fact 5)
120
