- •27. Управление программой. Внутренние подпрограммы унификации Пролога.
- •28. Структура программ на Прологе. Предикаты и утверждения.
- •29. Арифметика в Прологе.
- •30. Программирование повторяющихся операций. Повторение и откат.
- •31. Методы повторения. Методы организации рекурсии.
- •32. Списки в Прологе. Применение списков в программе.
- •34. Использование метода с разделением списка на голову и хвост. Компоновка данных в список.
- •34. Присваивание переменным строковых значений. Конкатенация строк. Преобразование данных.
- •35 Создание символьных префиксов. Преобразование строк в список символов.
- •38. Преобразование строк в списки атомов с функторами.
- •39.Предикаты Пролога для работы с файлами. Использование предикатов для работы с файлами.
- •40. Программы для обработки файлов.
- •41. Дозапись данных в файл
- •42. Использование файлов прямого доступа
- •43. Использование предикатов для работы с окнами. Использование окон для ввода вывода.
- •44. Использование графики в программе. Использование графики черепашки.
- •45.Использование звук и музыки.
- •46.Базы данных в Прологе. Предикаты динамической базы данных в Прологе.
- •47. Создание базы данных, располагающейся в оперативной памяти.
- •48. Создание базы данных, располагающейся на диске
- •49. Принципы построения экспертных систем
- •50.Методы вывода и система пользовательского интерфейса эс.
- •51.Экспертные системы, базирующиеся на правилах.
- •52.Экспертные системы, базирующиеся на логике.
28. Структура программ на Прологе. Предикаты и утверждения.
Программа на Прологе состоит из 5 разделов:
Описание доменов (domains) – содержит определение доменов, которые описывают различные классы объектов используемых в программе,
Раздел базы данных (database) – содержит утверждения базы данных, которые являются предикатами динамической базы данных (раздел может быть опущен),
Раздел описания предикатов (predicates) – служит для описания используемых программой предикатов,
Раздел описания цели (goal) – формирует на языке Турбо-Пролога назначение создаваемой программы,
Раздел описания утверждений (clauses) – сюда заносятся факты и правила, известные заранее (данные необходимые для работы программы).
Комментарии оформляются символами /* и */. Комментарии можно заносить в любое место программы и они могут быть неограниченной длины.
В разделе описания предикатов необходимо задать тип объектов каждого из предикатов.
Пр.:
predicates
like(symbol, symbol)
Здесь оба объекта предиката like относятся к базисному типу symbol. Первый объект имеет смысл «тот, кто любит», а другой «вещь, которую любят». Так же можно присвоить базисному типу своё имя, тогда в разделе описания доменов должны появиться описания:
domains
person, thing = symbol
predicates
like(person, thing), где person, thing – некие совокупности (домены) значений.
Турбо-Пролог имеет 6 встроенных типов доменов:
Символы (char),
целые числа (integer),
действительные числа (real),
строки (string),
символически имена (symbol) – последовательность букв, цифр и подчерков,
файлы (file).
Тип каждого из доменов должен быть объявлен в разделе domains. Предикаты используются для представления, как данных, так и правил для оперирования данными и описываются в разделе predicates. Предикаты пишутся маленькими буквами, те у которых отсутствуют объекты, называются «голыми».
predicates
likes(symbol,symbol)
book(symbol,symbol,integer) /* книга (название, автор, количество страниц) */
person(symbol,char,integer) /* некто (имя, пол (м или ж), возраст) */
do_search(integer)
sum(real,real,real,real)
Любое имя должно составлять не более 250 символов, первый из которых обязательно должен быть строчной буквой латинского алфавита, пробелы не допустимы.
Если существует такая программа целью, которой будет поиск и печать антонимов, то например, для антонима, например «тёплый» и «холодный». Можно записать следующее утверждение: антоним(тёплый, холодный), где тёплый антоним холодный. Термом предиката здесь является антоним, а объекты - это тёплый и холодный, а описание для этого предиката будет антоним(слово, антоним).
domains
word, ant = symbol /* описание доменов, что показывает, что данные объекта предиката представляют собой символические имена */
predicates
antonym(word, ant)
goal
antonym(тёплый, X) /* внутренняя цель, Х является свободной переменной, её значение конкретезировано*/
write(X)
clauses
antonym(тёплый, холодный). /* утверждение, где на первой позиции слово, а на второй антоним */
Имя переменной обязательно начинается с большой буквы.
Здесь сформулирована такая цель: «Найти утверждение, использующее предикат antonym, такое, что первым объектом в нём является тёплый, и связать переменную Х с его вторым объектом». После запуска программы просматриваются все утверждения, содержащие antonym и если есть такое с объектом тёплый, то Х принимает значение второго объекта.
Если в программе отсутствует цель, то программа предложит ввести её с экрана. Внешнюю цель полезно использовать при записи коротких целевых формулировок и для получения всего набора допустимых значений.
Если предикат не имеет объектов, то его арность равна нулю, они, как правило, используются для построения правил. Предикаты арности 1 полезны при сортировки объектов программы по доменам. Предикаты арности 2 используются для установления отношения между двумя объектами. Предикаты арности выше 2 пригодны для установления связи нескольких объектов по какому либо признаку.
Утверждение, предшествующее «если» называется заключением или логическим следствием, а утверждение, следующее за «если» - допущением или предпосылкой. Предикатные выражения – блоки из которых в Прологе строятся правила.
Отрицание предиката задаётся при помощи предиката not: not(border(Country1, Country2)). Такой предикат выдаст все пары не граничащих друг с другом стран. Отрицания бываю удобны для логического вывода неких фактов из уже имеющихся в базе данных.
