Главная страница
Навигация по странице:

  • Сопоставление

  • ИГА. Понятие базы данных


    Скачать 0.77 Mb.
    НазваниеПонятие базы данных
    Дата05.04.2022
    Размер0.77 Mb.
    Формат файлаdocx
    Имя файлаИГА.docx
    ТипДокументы
    #445246
    страница17 из 37
    1   ...   13   14   15   16   17   18   19   20   ...   37

    Конкретизация переменных (Prolog).


    Переменная, не имеющая значения, называется свободной, переменная, имеющая значение – конкретизированной. Еще существуют специальные переменные, называемые анонимными. Их имя состоит только из знака подчеркивания. Анонимные переменные используются в случаях, когда значение переменной несущественно, но переменная должна быть использована.

    Сопоставление и унификация. Предикат равенства (Prolog).


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

    1) parent(olga, anna) и parent(olga, anna) %сопоставление успешно.

    2) parent(Х, anna) и parent(olga, anna).

    2.1) переменная Х конкретизирована.

    2.2) переманная Х свободна %сопоставление успешно.

    3) parent(Х, anna) и parent(Y, anna).

    3.1) X и Y- свободные => сопоставление успешно.

    3.2) X- конкретизирована и Y- свободная => см. пункт 2)

    3.3) X и Y- конкретизированы => см. пункт 1) и 2)

    Унификация - результат процесса сопоставления, выражается в получении свободными переменными некоторых значений.

    В Prolog’е нет оператора присваивания, его роль выполняет оператор равенства “=”.

    Если записать следующую цель: …, X=5, …, то как эта цель будет рассматриваться, как сравнение или как присваивание, все зависит от того, получила ли какое-либо значение переменная X к моменту доказательства этой цели. Если переменная X имеет значение (например, равное 6), то оператор равенства = работает как оператор сравнения. Если же переменная X свободна (не имеет никакого значения), то оператор равенства = работает как оператор присваивания. При этом совершенно неважно, слева или справа от знака равенства находится имя переменной. Главное, чтобы она была свободной. С точки зрения программы на Prolog’е следующие две строки совершенно одинаковы:

    …, X=5, …

    …, 5=X, …

    Самое важное, чтобы переменная X не имела значения. Из вышесказанного вытекает следующая особенность использования переменных в Prolog’е, нельзя записывать вот так:

    …, X=X+5, …

    В любом случае такая цель будет ошибочной. Действительно, если переменная X имеет, например, значение равное 10, то предыдущая цель сводится к доказательству цели: …, 10=10+5, … что, естественно, доказать нельзя.

    Если же переменная X свободна, то нельзя к переменной, не имеющей никакого значения, прибавить 5, и присвоить эту неопределенность той же самой переменной. Как же тогда быть, если нужно изменить значение переменной? Ответ один – использовать новое имя, поскольку переменная, которая появляется в тексте программы впервые, считается свободной, и может быть конкретизирована некоторым значением: …, Y=X+5, … При этом опять же не важен порядок записи. Такая цель также будет правильной, и будет выполнять присваивание (конечно, если переменная X конкретизирована некоторым числом): …, X+5=Y, …

    Еще существуют специальные переменные, называемые анонимными. Их имя состоит только из знака подчеркивания. Анонимные переменные используются в случаях, когда значение переменной несущественно, но переменная должна быть использована.

    Основные секции программы (Prolog)


    Как правило, программа на Prolog’е состоит из нескольких секций, ни одна из которых не является обязательной. Вот основные секции:

    1. DOMAINS – секция описания доменов (типов). Секция применяется только, если в программе используются нестандартные домены.

    2. PREDICATES – секция описания предикатов. Секция применяется, если в программе используются нестандартные предикаты.

    3. CLAUSES – секция предложений. Именно в этой секции записываются предложения: факты и правила вывода. В этой секции все предложения заканчиваются точкой. … :-… .

    4. GOAL – секция цели. В этой секции записывается внутренний запрос. <цель1>, (;)<цель 2>…<цель N>

    На первый взгляд, без секций DOMAINS, PREDICATES и GOAL действительно можно обойтись, но как написать программу без секции CLAUSES? Конечно, такая программа не обладает большим кол-вом возможностей, но принципиально такую программу написать можно.

    Пример:

    GOAL

    write (“Введите Ваше имя: ”), readln (Name), write (“Здравствуйте, ”, Name, “!”).

    Вот пример программы, состоящей только из секции GOAL. Используются только стандартные домены, следовательно, отпадает необходимость использовать секцию DOMAINS, нет нестандартных предикатов, следовательно, отпадает необходимость использовать секцию PREDICATES, и, наконец, все цели записаны непосредственно в секции GOAL, следовательно, нет необходимости использовать секцию CLAUSES.
    1   ...   13   14   15   16   17   18   19   20   ...   37


    написать администратору сайта