На этом шаге мы рассмотрим использование внутренних баз фактов.
Поскольку Пролог представляет реляционную базу данных как коллекцию фактов, вы можете использовать его в качестве мощного языка запросов к внутренним базам фактов. Алгоритм унификации Пролога автоматически выбирает факты с правильными значениями для известных аргументов и присваивает значения неизвестным аргументам, пока его алгоритм поиска с возвратом выдает все решения для заданного запроса.
Предикаты, принадлежащие внутренней базе фактов, доступны точно так же, как и другие предикаты. Единственное видимое различие состоит в том, что объявления таких предикатов расположены в разделе 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 всегда недетерминированные. Так как факты могут быть добавлены в любой момент во время выполнения программы, компилятор всегда должен учитывать, что существует возможность найти альтернативные решения в ходе поиска с возвратом.
На следующем шаге мы рассмотрим объявление внутренней базы фактов.