Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПРОЛОГ.docx
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
99 Кб
Скачать
☆

28. Структура программ на Прологе. Предикаты и утверждения.

Программа на Прологе состоит из 5 разделов:

  1. Описание доменов (domains) – содержит определение доменов, которые описывают различные классы объектов используемых в программе,

  2. Раздел базы данных (database) – содержит утверждения базы данных, которые являются предикатами динамической базы данных (раздел может быть опущен),

  3. Раздел описания предикатов (predicates) – служит для описания используемых программой предикатов,

  4. Раздел описания цели (goal) – формирует на языке Турбо-Пролога назначение создаваемой программы,

  5. Раздел описания утверждений (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)). Такой предикат выдаст все пары не граничащих друг с другом стран. Отрицания бываю удобны для логического вывода неких фактов из уже имеющихся в базе данных.