Шаг 11.
Основы логического программирования.
Размещение фактов, правил и запросов

    На этом шаге мы рассмотрим размещение фактов, правил и запросов.

    Предположим, у вас есть следующие факты и правила:

    Быстрая машина - приятная. (A fast car is fun).
    Большая машина - красивая. (A big car is nice).
    Маленькая машина - практичная. (A little car is practical).
    Биллу нравится машина, если она приятная. (Bill likes a car if the car is fun).

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

    Вот пример, демонстрирующий, как Пролог использует правила для ответа на запросы.

   likes(ellen,tennis).
   likes(john,football).
   likes(tom,baseball).
   likes(eric,swimming).
   likes(mark,tennis).
   likes(bill,Activity):-  
      likes(tom,Activity).
    Последняя строка в программе является правилом:
   likes(bill,Activity):-  
      likes(torn,Activity).

    Это правило соответствует предложению естественного языка:

    Биллу нравится занятие, если Тому нравится это занятие. (Bill likes an activity if Tom likes that activity)

    В данном правиле заголовок - это likes (bill, Activity), а тело - likes (torn, Activity). Заметим, что в этом примере нет фактов о том, что Билл любит бейсбол. Чтобы выяснить, любит ли Билл бейсбол, можно дать Прологу такой запрос:

   likes(bill,baseball).
    Пытаясь отыскать решение по этому запросу, Пролог будет использовать правило:
   likes (bill, Activity):-  
      likes (tom, Activity).
    Рассмотрим программу:
   predicates
      likes(symbol,symbol)
   clauses
      likes(ellen,tennis). 
      likes(john,football).
      likes(tom,baseball).
      likes(eric,swimming). 
      likes(mark, tennis).
      likes(bill,Activity):-
         likes (tom, Activity).
Текст этой программы можно взять здесь.

    Запустите Пролог, загрузите программу pro11_1.pro с помощью пункта меню File | Load или клавиши F3, запустите программу с помощью пункта Run или сочетания клавиш Alt+R и после запроса цель наберите: likes(bill,baseball).

    Пролог ответит:

   yes   (да)

    Система использовала комбинированное правило

   likes(bill,Activity):-  
      likes(tom,Activity).
с фактом
   likes(tom,baseball).
для решения, что
   likes(bill,baseball).

    Попробуйте также следующий запрос:

   likes(bill,tennis).

    Пролог ответит:

   no   (нет)

    Пролог ответит по на последний запрос "Does Bill like tennis?" (Любит ли Билл теннис), поскольку:

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

    На следующем шаге мы рассмотрим общие представления о переменных.




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