- •1. Понятие об искусственном интеллекте и экспертных системах.
- •12. Системы продукций. Прямые и обратные системы продукции. Примеры применения. Разложимые системы продукций. Применение продукций в логических программах.
- •13. Реляционные модели. Основные определения. Реляционная алгебра. Возможности
- •Labdevices( computer, “ibm pc”, 10) labdevices( computer, “vax-11”, 2)
- •14. Метод резолюций. Резольвенты. Полнота метода. Отличие от классических схем вывода. Понятие о дизъюнктах. Демонстрация метода на примере дерева вывода.
- •19. Унификация. Подстановки. Композиция подстановок. Свойства композиции подстановок. Множество рассогласований.
- •20. Стратегии унификации. Пример дерева вывода стратегией “вглубь”.
- •21.Управление процессом решения в логической программе. Бэктрекинг. Отсечение. Повторение.
- •23. Декларативные и процедурные элементы Турбо-Пролога. Примеры применения в логической программе.
- •25.Обработка отношений в Турбо-Прологе. Примеры программирования композиций отношений.
- •26. Организация работы с файлами. Средства Турбо-Пролога для работы с файлами.
- •27. Динамические базы данных. Стандартные предикаты для работы с ними. Примеры применения.
- •Организация меню:
- •Vvod3:-makewindow(4,7,9," Расчёт выходов логической схемы ",0,0,25,80),
- •32. Отладка и трассировка логических программ.
- •34. Общение с эвм на языке, близком к естественному. Проблемы общения. Роль языков представления знаний в проблеме общения.
- •35. Структура лингвистического транслятора.
- •О озу бобщённая схема машины логического вывода.
23. Декларативные и процедурные элементы Турбо-Пролога. Примеры применения в логической программе.
Одной из основных тенденций развития компьютерной техники является максимальное освобождение пользователей от непосредственного программирования решения задач за счет передачи этих функций компьютеру.
В настоящее время это делается различными подходами: в рамках традиционного программирования и в рамках научного направления, называемого искусственным интеллектом.
В рамках традиционного программирования это делается множеством способов: применением стандартных библиотек, позволяющих автоматизировать некоторые процедуры программирования, визуальными и инструментальными средствами, позволяющими автоматизировать процесс разработки программных интерфейсов, компонентными технологиями и тому подобное.
Второе направление основано на формализации знаний и применении достижений и средств математической логики. В рамках этого направления развивается совершенно другой подход к программированию, называемый декларативным или логическим, в отличие от первого - процедурного.
Принципиальным отличием декларативного программирования от процедурного является то, что в случае процедурного программирования пользователь сам конструирует процесс решения задачи в виде алгоритма, а в случае декларативного программирования основным моментом является формализованное описание некоторой предметной области в виде базы знаний, из которой требуемое решение задачи формально выводится в виде некоторого следствия из неё. Такая база знаний должна состоять из истинных утверждений для заданной предметной области. Таким образом, если база знаний описана достаточно полно, то задача пользователя решается автоматически за счет механизмов формального вывода и нет необходимости детально конструировать процесс ее решения.
Ключевым моментом декларативного или логического программирования является формализация знаний на основе механизмов логического вывода. Человек получает знания в самых различных формах. Это могут быть изображения, схемы, чертежи, таблицы, документы, факты, методы, алгоритмы, законы, правила и тому подобное. В более абстрактной форме все эти формы знаний можно представить в виде понятийных, конструктивных (описание строения объекта, его структуры и взаимосвязи элементов) и процедурных. Ещё в более абстрактной форме их можно свести в две группы знаний: процедурные и декларативные. Первые описывают предметную область, а вторые описывают процедуры решения задач.
Принцип декларативного программирования требует представления знаний в виде истинных утверждений, записанных на некотором формализованном языке, допускающем работу механизмов формального вывода. Сами утверждения могут иметь различную форму.
1) grandfather(misha, ania):- father(misha, nina), mother(nina, ania)
2) parent(X, Y):- mother(X, Y); father(X, Y)
grandfather(X, Y) :- father(X, Z), parent(Z, Y)
24. Организация ветвлений и циклов в программе. Рекурсии. Прямая и обратная рекурсии. Примеры.
Под рекурсией понимается применение правила в самом теле этого же правила.
Общую схему применения рекурсии можно пояснить записью:
recrule(X,Y,..., Z) :- fact1( ), rule1( ),..., factk( ), rulek( ), recrule(X1,Y1,...,Z1)
В теле этого правила содержатся различные факты и правила, а также обращение к самому себе, но с другими значениями некоторых или всех его аргументов.
Рекурсии в логических программах широко используются для организации циклической обработки данных. pr_rec([x|t]):-write(x),nl,pr_rec(t). ob_rec([x|t]):-ob_rec(t),write(x),nl
Задача: Просуммировать k раз заданное число n.
domains k = integer s, n = real
predicates summa( s, n, k )
clauses
summa( S, N, K) :- K>0, K1 = K - 1, S1= S+N, summa( S1, N, K1).
summa( S, N, K) :- K=0, write( "сумма =", S).
Пусть n=5.6 , k=10.
При запуске этой программы в окне ввода целей на запрос goal: вводится запрос summa(0,5.6,10), где 0 - это начальное значение суммы, 5.6 - суммируемое число, а 10 - кратность суммирования.
С помощью первого правила выполняется цикл суммирования, в результате которого вычисляется сумма. В конце цикла значение переменной К становится равной нулю, что делает истинным второе правило, с помощью которого выводится результат.
domains
x = integer
predicates
factorial1(x,x) // на обратном ходе
factorial2(x,x) // на прямом ходе
stepen1(x,x,x)
stepen2(x,x,x)
clauses
factorial1(0,1).
factorial1(X,Y):- X>0,X1=X-1,factorial1(X1,Y1),Y=Y1*X.
stepen1(_,0,1).
stepen1(X,K,S):- K>0,K1=K-1,stepen1(X,K1,S1),S=S1*X.
factorial2(X,Y):- X>0,Y1=Y*X,X1=X-1, factorial2(X1,Y1).
factorial2(X,Y):- X=0,write("F=",Y).
stepen2(X,K,S):- K>0,S1=S*X,K1=K-1,stepen2(X,K1,S1).
Stepen2(X,K,S):- K=0,write("S=",S).
Результат: Factorial1(7,X) X=5040 Factorial1(3,6) Yes Factorial2(7,1) F=5040 Yes
Stepen1(2,7,X) X=128 Stepen1(2,7,128)Yes Stepen2(2,7,1) S=128 Yes
