На этом шаге мы рассмотрим использование внутренних баз фактов.
Поскольку Пролог представляет реляционную базу данных как коллекцию фактов, вы можете использовать его в качестве мощного языка запросов к внутренним базам фактов. Алгоритм унификации Пролога автоматически выбирает факты с правильными значениями для известных аргументов и присваивает значения неизвестным аргументам, пока его алгоритм поиска с возвратом выдает все решения для заданного запроса.
Предикаты, принадлежащие внутренней базе фактов, доступны точно так же, как и другие предикаты. Единственное видимое различие состоит в том, что объявления таких предикатов расположены в разделе database вместо раздела predicates. В следующем примере:
domains
name=string
sex=char
database
person(name,sex)
clauses
person("Helen",'F').
person ("Maggie",'F').
person("Suzanne",'F').
person("Per",'M').
вы можете вызвать person с целью person (Name,'F') для нахождения всех женщин, или person ("Maggie",'F') для проверки того, что женщина по имени Maggie существует в вашей базе данных.
По своей природе предикаты в разделе database всегда недетерминированные. Так как факты могут быть добавлены в любой момент во время выполнения программы, компилятор всегда должен учитывать, что существует возможность найти альтернативные решения в ходе поиска с возвратом.
На следующем шаге мы рассмотрим объявление внутренней базы фактов.