Последовательные вычисления.
Если при вычислении обнаруживается
Если же получен ответ, то для продолжения получения других ответов также нужно выполнить
Достоинством
Рассмотрим эти способы.
Использование '|' вертикальной черты. При его выполнении (когда он становится самым левым в запросе) забываются все разветвления до этого места и возврат производится только к последующим разветвлениям. Пусть, например, имеются правила:
P <- A, |, B P <- C.
Тогда при выполнении A и при выполнении второго правила.
Рассмотрим пример из книги Клоксина и Мелиша "Программирование на языке Пролог". Описывается база знаний библиотеки, которая определяет занятость книг читателями, отсутствие возврата читателем книги к сроку и услуги, предоставляемые для читателей. Услуги делятся на основные, к которым относится пользование каталогом и получение справок, и дополнительные, к которым относится пользование абонементом и межбиблиотечным абонементом. Дополнительные услуги не оказываются для читателей, которые имеют задолженность по возврату взятых книг. Некоторый запрос должен определить список услуг, предоставляемых каждому читателю. При составлении такого списка мы должны учитывать, что если читатель не возвратил хотя бы одну книгу, то не надо исследовать, какие книги он еще не возвратил, - ему предоставляются только основные услуги. В этом случае мы и используем оператор
книга (книга123456) <-
книга (книга234567) <-
книга (книга345678) <-
. . .
читатель ('Иванов') <-
читатель ('Петров') <-
читатель ('Сидоров'’) <-
. . .
книгаНеВозвращена ('Иванов', книга123456) <-
книгаНеВозвращена ('Сидоров', книга234567) <-
книгаНеВозвращена ('Иванов', книга345678) <-
. . .
оснУслуги (каталог) <-
оснУслуги (справки) <-
допУслуги (абонемент) <-
допУслуги (межбиблАбонемент) <-
общУслуги (X)<- оснУслуги (X)
общУслуги (X) <- допУслуги (X)
услуги (Читатель, ВидУслуг)<- читатель (Читатель),
книгаНеВозвращена
(Читатель, Книга),
|, основныеУслуги (ВидУслуг)
услуги (Читатель, ВидУслуг) <- общУслуги (ВидУслуг)
При выполнении запроса
<- читатель (X), услуги (X, Y)
сначала отождествляется переменная X с читателем Иванов. Затем начинает выполняться второй атом запроса, который должен установить список услуг для данного читателя. При выполнении первого правила с услуги образуется новый запрос:
<- читатель ('Иванов'), книгаНеВозвращена ('Иванов', Книга), |, основныеУслуги (ВидУслуг)
Первый атом этого запроса отождествляется с фактом (удачное вычисление). При вычислении второго атома этого запроса будет сначала найден факт
книгаНеВозвращена ('Иванов', книга123456) <-, и так как следующий атом запроса - оператор Ивановым и переход к использованию других правил процедуры услуги. Результатом вычисления запроса для Иванова будет список только основных услуг.
При вычислении следующего запроса для Петрова, у которого все книги возвращены вовремя, вычисление запроса для первого правила процедуры услуги закончится неудачно, и вычисление запроса для второго правила этой процедуры приведет к появлению всех услуг для Петрова.
При способе добавления спецификаций преодоления недостатка большого перебора в программу Пролога добавляются
Параллельные вычисления.
Различают 2
| Запрос | Описание действия |
|---|---|
<- |
Просматривает файл и добавляет из него правила в конец программы |
<- reconsult (<имя файла>) |
Вводимые из файла правила заменяют все правила до данного |
<- var (X) |
X является неконкретизированной переменной |
<- nonvar (X) |
X не является неконкретизированной переменной |
<- |
X – |
<- integer (X) |
X – целое число |
Другие встроенные
Помимо этого используются not для
<- (not мать (X, Y); Y=ева), |, fail
вычисления запроса прекращаются, как только будет обнаружено, что Y интерпретируется как ева или для интерпретации Y имеется объект X, который не находится с Y в отношении мать.
| Предикат | Описание отношения |
|---|---|
true |
всегда истинный |
|
всегда ложный |
plus (X, Y, Z) |
X+Y=Z (для сложения и |
times (X, Y, Z) |
X*Y=Z (для умножения и деления) |
read (X) |
читает X |
write (X) |
печатает |
Использование not основано на следующем стандартном определении отношения not X ), где X - целевой предикат:
not X <- X,|,fail not X <-
В этой конструкции порядок правил программы фиксирорван и не зависит от стратегии (сначала идет правило с not мать( X1,Y1) он становится целевым и рассматривается первое правило. При этом обрабатывается сначала предикат мать(X1,Y1), и если найдется X1 и Y1, при которой этот предикат имеет истинное значение, то последующее в теле правила отсечение приводит к омене всех разветвлений до этого места (т. е. второе правило не применяется) и значение определяется встроенным предикатом , имеющем всегда ложное значение. Если же такой интерпретации переменных X1 и Y1 не найдется, то вычисления в силу not X, что приводит к истинному значению предиката not мать (X1,Y1).
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.