Шаг 13.
Основы логического программирования.
Предложения

    На этом шаге мы рассмотрим предложения.

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

    По сути, есть только два типа фраз, составляющих язык Пролог: фраза может быть либо фактом, либо правилом. Эти фразы в Прологе известны под термином предложения (clause). Сердце программ на Прологе состоит из предложений.

    Подробнее о фактах. Факт представляет либо свойство объекта, либо отношение между объектами. Факт самодостаточен. Прологу не требуется дополнительных сведений для подтверждения факта, и факт может быть использован как основа для логического вывода.

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

    Рассмотрим несколько примеров работы с правилами.

    1. Пример, иллюстрирующий правило, которое может быть использовано для того, чтобы сделать вывод, подходит ли некоторое блюдо из меню Диане:

    Диана - вегетарианка и ест только то, что говорит ей ее доктор. (Diane is a vegetarian and eats only what her doctor tells her to eat)

    Зная меню и предыдущее правило, вы можете сделать вывод о том, выберет ли Диана данное блюдо. Чтобы выполнить это, вы должны проверить, соответствует ли блюдо заданному ограничению:

    В Прологе подобное отношение должно быть выражено правилом, т. к. вывод основан на фактах. Вот один вариант записи правила:

   diane_can_eat(Food_on_menu):-
      vegetable(Food_on_menu), 
      on_doctor_list(Food_on_menu).
    Обратите внимание, что после vegetable(Food_on_menu) стоит запятая. Она обозначает конъюнкцию нескольких целей и читается как "и"; оба правила - vegetable (Food_on_menu) и on_doctor_list (Food_on_menu) - должны быть истинны для истинности diane_can_eat (Food_on_menu) .

    2. Предположим, что вам хотелось бы записать факт, который истинен, если Person1 является родителем Person2. Нужный факт выглядит так:

   parent(paul,samantha).

    Этот факт обозначает, что Пол - родитель Саманты. Но, предположим, что в базе данных фактов Пролога есть факты, формулирующие отношение отцовства. Например, "Пол - отец Саманты":

   father(paul,samantha).

    Пусть у вас также есть факты, формулирующие отношение материнства, например, "Джулия - мать Саманты":

   mother(julie,samantha).

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

    Так как вы знаете, что Person1 - родитель Person2, если Personl - отец Person2 или Person1 - мать Person2, то почему бы не записать правило, объединяющее эти ограничения? После формулирования этих условий на естественном языке достаточно просто записать их в правило Пролога.

   parent(Person1,Person2):- 
      father(Person1,Person2). 
   parent(Person1,Person2):- 
      mother(Person1,Person2).

    Эти правила Пролога говорят, что

    Person1 является родителем Person2, если Person1 является отцом Person2.
и
    Person1 является родителем Person2, если Person1 является матерью Person2.

    3. Вот другой пример:

    Человек может купить машину, если машина ому нравится (likes), и если машина продается (for sale).

    Это отношение может быть переведено на язык Пролог следующим правилом:

   can_buy(Name,Model):-
      person(Name), 
      car(Model),
      likes(Name,Model),
      for_sale(Model).
    Это правило выражает следующие отношения:

    Name может купить (can_buy) Model,
       если Name является человеком (person),
       и Model является машиной (саr),
       и Name нравится (likes) Model,
       и Model продается (for_sale).

    Это правило будет истинным, если истинны все 4 условия в теле правила.

    На следующем шаге мы рассмотрим предикаты.




Предыдущий шаг Содержание Следующий шаг