На этом шаге мы рассмотрим примеры использования внутренней базы фактов.
   domains
      thing=string 
      conds=cond*
      cond=string
   database - knowledgeBase
      is_a(thing,thing,conds)
      type_of(thing,thing,conds) 
      false(cond)
   predicates
      run(thing)
      ask(conds)
      update
   clauses
      run(Item):-
         is_a(X,Item,List),
         ask(List),
         type_of(ANS,X,List2),
         ask(List2),
         write("The ",Item,"you need is a/an ",Ans),nl.
      run(_):-
         write("This program does not have enough "), 
         write("data to draw any conclusions."), nl.
      ask([ ]).
      ask([H |T]):-
         not(false(H)),
         write("Does this thing help you to "),
         write (H," (enter y/n)"),
         readchar(Ans),nl,
         Ans='y',
        ask(T).
     ask([H |_]):-
        assertz(false(H)),
        fail.
   is_a(language,tool,["communicate"]).
   is_a(hammer,tool,["build a house","fix a fender","crack a nut"]).
   is_a(sewing_machine, tool,["make clothing","repair sails"]).
   is_a(plow, tool, ["prepare field","farm"]).
   type_of(english,language,["communicate with people"]).
   type_of(prolog,language,["communicate with a computer"]).
   update:-
      retractall(type_of(prolog,language,
                    ["communicate with a computer"])),
      asserta(type_of("Visual  Prolog",   language,
                  ["communicate with a personal  computer"])),
      asserta(type_of(prolog,   language,
                  ["communicate with a mainframe computer"])).
Следующие факты могли бы быть занесены с помощью предиката asserta или assert, или считаны из файла с помощью предиката consult. Однако в этом примере они расположены в разделе clauses.
is_a(language,tool,["communicate"]). is_a(hammer,tool,["build a house","fix a fender","crack a nut"]). is_a(sewing_machine,tool,["make clothing","repair sails"]). is_a(plow, tool,["prepare fields","farm"]). type_of(english,language,["communicate with people"]). type__of (prolog,language,["communicate with a computer"]).
В качестве цели введите:
   goal
      run(tool).
Теперь введите следующую цель:
update, run(tool).
Предикат update включен в исходный код программы, удаляет факт
type_of(prolog,language,["communicate with a computer"]).
из внутренней базы фактов knowledgeBase и добавляет два новых факта в программу:
   type_of(prolog,language,["communicate with a mainframe computer"])
   type_of("prolog",language,["communicate with a personal  computer"])
С помощью вызова предиката save/2 с именами текстового файла и базы фактов в качестве его аргументов можно сохранить всю базу данных факт и knowledgeBase в текстовом файле. Например, после вызова
   save("mydata.dba",knowledgeBase)
файл mydata.dba будет аналогичен разделу clauses обычной программы Пролога, и каждый факт будет записан в отдельной строке. С помощью предиката consult можно считать факты из этого файла в память:
   consult("mydata.dba",knowledgeBase).
   database- dbal %  dbal домен для этих предикатов
      person(name,telno)
      city(cno,cname)
Получив такие объявления, компилятор Пролога сгенерирует соответствующий домен dba1:
   domains
      dbal=person(name,telno); cityf(cno,cname)
Этот домен dba1 может быть использован так же, как любой другой домен.
Со следующего шага мы начнем рассматривать создание и работу с окнами.