Читаем Prolog полностью

Переменные в новом списке целей заменяются новыми значениями, как это предписывает конкретизация  S,  что порождает еще один список целей

        В1'',  ....  Вn", G2',   ...,  Gm'

Вычисляет (используя рекурсивно ту же самую процедуру) этот новый список целей. Если его вычисление завершается успешно, то и вычисление исходного списка целей тоже завершается успешно. Если же его вычисление порождает неуспех, тогда новый список целей отбрасывается и происходит возврат к просмотру программы. Этот просмотр продолжается, начиная с предложения, непосредственно следующего за предложением  С   (С  -  предложение, использовавшееся последним) и делается попытка достичь успешного завершения с помощью другого предложения.

Более компактная запись этой процедуры в обозначениях, близких к Паскалю, приведена на рис. 2.11.

Здесь следует сделать несколько дополнительных замечаний, касающихся процедуры вычислить в том виде, в котором она приводится. Во-первых, в ней явно не указано, как порождается окончательная результирующая конкретизация переменных. Речь идет о конкретизации S, которая приводит к успешному завершению и которая, возможно, уточнялась последующими конкретизациями во время вложенных рекурсивных вызовов вычислить.

procedureвычислить (Прогр, СписокЦелей, Успех)

Входные параметры:

        Прогр:   список предложений

        СписокЦелей:   список целей

Выходной параметр:

        Успех:          истинностное значение; Успех принимает значение

                               истина, если список целевых утверждений

                               (их конъюнкция) истиннен с точки зрения Прогр

Локальные переменные:

        Цель:  цель

        ДругиеЦели:  список целей

        Достигнуты:   истинностное значение

        Сопоставились:   истинностное значение

        Конкрет:   конкретизация переменных

                Н,   Н',  B1,  B1',  ...,  Вn ,  Вn':   цели

Вспомогательные функции:

        пycтой( L):   возвращает истину, если L - пустой список

        голoвa( L):   возвращает первый элемент списка L

        хвост( L):   возвращает остальную часть списка L

        конкат( L1, L2):   создает конкатенацию списков - присоединяет

                список L2 к концу списка L1

        сопоставление( T1, T2, Сопоставились, Конкрет): пытается

                сопоставить термы Т1 и T2; если они сопоставимы, то

                Сопоставились - истина, а Конкрет представляет

                собой конкретизацию переменных

        подставить( Конкрет, Цели): производит подстановку переменных

                в Цели согласно Конкрет

begin

    if пустой( СписокЦелей) then Успех : = истина

    else

        begin

            Цель : = голова( СписокЦелей);

            ДругиеЦели : = хвост( СписокЦелей);

            Достигнута : = ложь;

            while not Достигнута and

                "в программе есть еще предложения" do

                begin

                    Пусть следующее предложение в Прогр есть

                            Н    :-   B1,  ....  Вn.

                    Создать вариант этого предложения

                            Н'    :-   В1',  ....  Вn'.

                    сопоставление( Цель, Н',

                                                    Сопоставились, Конкрет)

                    if Сопоставились then

                        begin

                            НовыеЦели : =

                                конкат( [В1', ..., Вn' ], Другие Цели);

                            НовыеЦели : =

                                подставить( Конкрет, НовыеЦели);

                            вычислить( Прогр, НовыеЦели, Достигнуты)

                        end

                    end;

            Успех : = Достигнуты

        end

end;

Рис. 2. 11.  Вычисление целевых утверждений Пролога.

Всякий раз, как рекурсивный вызов процедуры вычислить приводят к неуспеху, процесс вычислений возвращается к ПРОСМОТРУ и продолжается с того предложения  С,  которое использовалось последним. Поскольку применение предложения  С  не привело к успешному завершению, пролог-система должна для продолжения вычислений попробовать альтернативное предложение. В действительности

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

возврат

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных