
- •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. Металогические предикаты для определения типа переменных
87. Традиционная форма записи списка
Стандартная форма записи терма в прологе является запись терма в виде структуры, состоящие из функтора и компонента. Наряду с такой формой возможна и операторная нотация, при которой главный функтор структуры объявляется в виде оператора, а компоненты являются операндами.
операторная форма используется для улучшения формы записи программы. Кроме того, в виде операторов объявлены основные стандартные предикаты пролога
Вид:
op(prior, assoc,name_func)
prior - приоритет оператора, определяет порядок выполнения операции, содержащий несколько операторов. В большинстве пролог систем принимает значение от 0 до 1200.
assoc - ассоциативность. выполняет порядок операции в выражении, содержащем операторы с разным приоритетом и вид оператора. assoc имеет следующее значение.
для префиксных: fx,fy. Для постфиксных: xfyf. Для инфиксных xfy, yfx, xfx.
x - обозначает предикат, имеющее приоритет выше приоритета оператора. y - определяет оператор приоритет которого меньше или равен приоритету оператора.
88. Рекурсивное логическое программирование
Два способа решения задачи: фунциональная декомпозиция (исходная задача разбивается на несколько простых подзадач). Второй способ предполагает, что задача сводится к ней самой, но с более простыми условиями.
Основы математической теории рекурсивных функций.
Рекурсивная функция предполагает, что задача, с помощью рекурентных отношений, может быть описана, и известно решение для простых "условий".
Простая предполагает наличие явного вызова функции в её теле.
Реализация рекурсивного процесса.
При выполнении рекурсивной функции генерируется отложенные вызовы функции в момент, когда процесс доходит до обращения этой функции. Фреймом акцивации называется набор данные, необходимых для выполнения одного раза функции. Включает копии параметров. При рекурсивных вызовах
89. Запись фактов, записи рекуррентных определений
Факты - это самая простая форма предикатов Пролога. Факты имеют следующий синтаксис записи: predicat(arg1, ... argN). Допустимое имя предиката (атома): Строка начинающаяся с "маленькой буквы" и содержащая буквы и цифры. Нельзя использовать в имени двойные кавычки - они используются для обозначения строк. Аргументы - перечисленные через запятую термы Пролога (integer, atom, variable, structure). Имена переменных должны начинаться с большой буквы, или символа подчеркивания (и этим они отличаются от атомов). Аргументом также может быть строка символов в одинарных кавычках, которые становятся частью имени только если иначе строка не является допустимым аргументом (иначе интерпретатор их проигнорирует). Рекурсия - один из основных приёмов программирования в декларативных языках, какими являются Пролог и Лисп. Предикат или функция называются рекурсивными, если они ссылаются на самих себя. При этом задача разбивается на части все меньшего и меньшего размера до тех пор, пока они не станут настолько малы, что их решение не будет сводиться к набору из одной или нескольких простейших операций. Обычно рекурсивная программа состоит как минимум из двух частей: 1. граничного условия, при котором рекурсия останавливается; 2. рекурсивного условия, при котором в описание функции или предиката входит и сама функция или предикат.
90. Определение процедуры слияния списков
?-ap([a,b,c],[d,e,f],X).
X=[a,b,c,d,e,f].
ap([],L2,L2).
ap([X|L1],L2,[X|L3]):-ap(L1,L2,L3).
91. Определение процедуры определения длины списка
?-dlin([a,b,c],X).
X=3
dlin([],0).
dlin([X|L],R):-dlin(L,R1), R is R1+1.
92. Определение процедуры определения факториала
fac(1,1).
fac(N,Res):- N>1,N1 is N-1,fac(N1,T), Res is T*N.
93. Определение процедуры четного и нечетного списка
>(even '(a b c d))
t
>(number '(a b c d))
nil
>(defun even(list)(
(cond
((null list) T);
(t (num (cdr list))
)
))
>(defun num (list)
(cond
((null list) nil)
(t (even (cdr list))
))
null - функция, проверяющая список на пустоту
94. Нелогические предикаты
Нелогические предикаты являются детерменированными. Предикаты этой группы можно разделить на 2 части: предикаты обеспечивающие доступ к текущей программе и её обработку. Предикаты, обеспечивающие ввод-вывод. Предикаты об. в/в можно разделить на 2 подгруппы: 1) по принципу элемента, который перемещается между оперативной памятью и источником. 2) обеспечивающие перемещение символа. При использовании предикатов, которые организуют ввод/вывод термов, программируются базы знаний и их адаптация.
Пролог работает с внешними устройствами в последовательном режиме.
see(file) % file - Имя файла, записаное по правилам оп.системы, открывается входной поток и связывается с файлом file, если он не существует, то он будет создан.
seeing(File) %File - связывание текущ. потока с File
Seen
tell(file)
telling(File)
told