Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2docx-1.doc
Скачиваний:
3
Добавлен:
01.03.2025
Размер:
2.27 Mб
Скачать

36.Расширение логического интерпретатора Пролога средствами языка. Мета-интерпритаторы. Примеры

Метапрограммирование - написание компьютерных программ, кот. манипулируют другими программами как данными: Реализация «надстройки» ЯП; Трансляция фрагмента кода программы в другое представление; Генерация и последующее выполнение кода во время выполнения.

Построение интепретатора Пролог-программы, кот. исп-ет видоизмененный механизм логического вывода. Ограничение глубины поиска. Построение дерева вывода. Используем стандартное представление Пролог-программы. Метаинтерпретатор оформляется как предикат solve, которому передается запрос.

Пролог на прологе

prove(true) :- !.

prove(','(A,B)):-prove(A),prove(B). prove(G):-clause(G,Body),prove(Body).

parent(vasya,petya).

parent(anna,petya).

brother(X,Y) :-

parent(A,X), parent(B,X), parent(A,Y), parent(B,Y).

?- prove(brother(X,Y)).

Не совсем «честная» реализация, поскольку используются встроенные возможности по манипуляции деревьями и по логическому выводу с возвратами. Описывается основной алгоритм работы логического интерпретатора, который можно далее модифицировать.

Вывод с ограничением по глубине (в ширину)

proved(true,_) :- !.

proved('(A,B),D):- D>0, D1 is D-1,

proved(A,D1), proved(B,D1). proved(G,D):- D>0, D1 is D-1, clause(G,Body) proved(Body,D1).

provedpth(G) :- integer(X), proved(G,X).

Вывод с ограничением по глубине позволяет выполнять запросы, в которых дерево вывода бесконечно влево. Введение постепенно увеличивающегося ограничения по глубине позволяет организовать обход дерева вывода в ширину.

24. Разностные списки. Хвостовая рекурсия. Сведение рекурсивного нехвостового опре­деления к хвостовому. Примеры.

Df Разностный список L=<L_2,L_1>- пара списков такая, что L_1 явл-ся хвостом L_2.

В операторной нотации обозначают / или - L L о A/A или L L|A/A. Виды рекурсии (обычно реализ-ся с помощью стека): 1.Линейная. Рекурсивный вызов – последний в определении, нет локальных пер-х требующих выч-я на дальнейших эта-пах. Может быть хвостовой: реализ-ся без стека сведением к итерационному процесс-су. 2.Нелинейная. Много(>1) раз вызывается в теле функции. При создании двоич­ного дерева в императиве.3.Косвенная. Процедуры обращаются друг к другу (рекурсивный спуск) Хвостатизация 1.Ввести дополнительную переменную (аккумулятор), кот. при каждом по­гружении в рекурсию будет увеличиваться на 1. 2.Убрать к-л вычисления после рек-го вызова: length ([X], 1). length([_|X], N):-length(X, N1), N is N1 + 1.

length(L,N):- length(L,0,N). length([],N,N). length([X|T],S,N):-S1 is S+1, length(T, S1, N).

Реверс (простой, хвостовой, разностный):

1.reverse([], []).reverse([X|T], R):- reverse(T, T1), extend(T1, [X] R).

2.reverse(L,R):- reverse(L,[],R). reverse([],R, R). reverse([X|T], L, R):- reverse(T, [X|L], R).

3.на самом деле не очень понятно: reverse(L, R):- rev(L, R/[]). rev([], R/R). rev([X|T], R/L):- reverse(T, R/[X|L]).

Конкатенация (простая, разностная X - Y = (X - T) + (T - Y))

1.extend([], X, X). extendQXjT], L, [X|R]):- extend(T, L, R).

2. extend(X/T, Y/T, X/Y). ?- extend([1,2|T]/T, [3,4|Y]/Y, R). R = [1,2,3,4|Y]/Y

1.Различные парадигмы прогр-я и подходы к опр-ию выч-ти. Декларативные ЯП как альтер­натива императивным. ЛП как алгоритми­ческая модель, альтернативная модели Тьюринга — фон Неймана.

2.Логика предикатов 1-го порядка. Семантика логики предикатов. По­нятия выполнимости и общезначимости. Понятие логического след­ствия |=.

3.Исчисление предикатов 1-го порядка. Понятие о формальной аксио­матической системе. Выводимость (|-). Правило вывода modus ponens.

4.Понятие о полноте, непротиворечивости и корректности логической системы. Связь логического вывода с общезначимостью. Теорема о дедукции.

5.Алгоритмическая неразрешимость исчисления предикатов. Теорема Черча. Теорема Геделя о неполноте формальной арифметики,

6.Нормальные формы (КНФ, Скулемовская и клаузальная). Дизьюнкты Хорна. Сведение формул логики предикатов к фразам Хорна.

7.Унификация. Правила унификации сложных структур.

8.Правило вывода modus tollens. Простое и обобщенное правило резо­люции.

9.Метод резолюции для реализации эффективного логического вывода в лог. программах на основе фраз Хорна. Стратегии резолю­ции. SLD-резолюция.

10.Рекурсивное описание алгоритма работы SLD-резолютивного лог. Инт-ора. Механизм бэктрекинга. Дерево вывода. Стра­тегии обхода дерева вывода.

11.Декларативная и процедурная семантика языка ЛП. Примеры.

12.Отриц. Отриц. по неуспеху и предпол-е о замк-ти мира.SLDNF-резолюция.

13.Пролог как язык логического программирования.

14.Основные объекты языка Пролог: атомы, числа, константы, переменные, термы, структурные термы, предикаты.

15.Операторы. Предс-е и выч-е арифм-х выр-й. Определяемые пользователем операторы. Представление преди­катов и правил структурными термами.

16.Подходы к орг-и циклов в ЛП. При­меры. Предикаты for, repeat.

17.Управление перебором и отсечение. Предикат not.

18.Встроенные предикаты Пролога: read, write, nl.

19.Предикаты динамического изменения БД Пролога: asserta/assertz, retract. Примеры. Предикаты поиска множества решений (findall, bagof/setof).

20.Представление списков. Связь списков и структурных термов. Опера­тор =..

21.Описание основных предикатов обработки списков: определение дли­ны, взятие n-ого элемента, прин-ть элемента списку, конка­тенация списков.

22.Описание основных предикатов обработки списков: удаление элемента из списка, определение подсписка, перестановки.

23.Порядковое представление списков. Представление матриц. Примеры.

24.Разностные списки. Хвостовая рекурсия. Сведение рекурсивного нехво­стового определения к хвостовому. Примеры.

25.Деревья. Деревья поиска, основные операции с деревьями поиска.

26.Сбалансированные деревья. Алгоритм добавления узла в сбалансиро- ванное дерево.

27.Представления графов. Алгоритмы поиска пути в графе

28.Метод генерации и проверок для решения задач. Метод ветвей и границ. Явный и неявный перебор в Пролог-программах.

29.Основные метода сокращения перебора на примере задач криптогра­фии, расстановки ферзей, игры N2 -1

30.Решение задач методом поиска в пространстве состояний. Пример. Принципы подбора алгоритма поиска пути в зависимости от задачи.

31.Операторы. Преобразование символьных выражений в дерево. Вычис­ление значения арифметического выражения по строке.

32.Символьные вычисления. Алгоритм символьного дифференциирования.

33.Подходы к символьному упрощению выражений.

34.Анализ ест-го языка с использованием контекстно-свободной грамматики. Подход к интерпретации знаний в естественно-языковом материале.

35.Учет контекстных условий. Работа со словарями. Глубинные и поверх­ностные структуры в естественном языке.

36.Расширение лог.интерпретатора средствами языка. Мета-интерпретаторы.