Лекция №11 - Факты в Visual Prolog 7.1
Код роботи: 1339
Вид роботи: Лекція
Предмет: Технологія створення програмних та інтелектуальних систем (Технология создания программных и интеллектуальных систем)
Тема: №11 - Факты в Visual Prolog 7.1
Кількість сторінок: 4
Дата виконання: 2016
Мова написання: російська
Ціна: 100 грн
1. Класс file
1.2. Чтение и вывод строки
2. Константы
Фактом является хорновское предложение без хвоста. Факты могут быть добавлены, изменены или удалены динамически, во время исполнения программы. Пример поможет вам понять, почему факты необходимы в Прологе. Давайте предположим, что вы хотите создать маленькую базу данных о публикациях. Когда вы получаете новую книгу, вы хотите добавить её к базе данных.
addItem(journal("AI in focus", "MIT Press")).
Предикат addItem/1 может быть определён так:
class predicates
addItem:(volume).
clauses
addItem(V) :-
num := num+1,
assert(item(V, num)).
Выполнение addItem (journal("AI", "AldinePress")) добавляет предложение:
item(journal("AI", "AldinePress")).
к базе данных, и увеличивает переменную num.
Объявление:
class facts – bib
num:integer := 0.
item:(volume, integer) nondeterm.
создаёт базу данных фактов (fact database) bib, с переменной num и предикатом item/2; предикат nondeterm, а переменная single. Домен volume, предоставляющий возможность типизации записей в этой маленькой базе данных, определён как:
domains
name= string.
author= n1(name); n2(name, name); etal(name).
publisher= string.
title= string.
volume= journal(title, publisher); book(title, author).
Программа ниже показывает, как определять факты и как сохранять базу данных фактов в файл.
% Файл main.pro
implement main
open core
domains
name= string.
author= n1(name); n2(name, name); etal(name).
publisher= string.
title= string.
volume= journal(title, publisher); book(title, author).
class facts – bib
num:integer := 0.
item:(volume, integer) nondeterm.
class predicates
addItem:(volume).
prtDataBase:().
clauses
classInfo("main", "facttest").
addItem(V) :- num := num+1,
assert(item(V, num)).
prtDataBase() :- item(V, I),
stdio::write(I, "=", V), stdio::nl,
fail.
prtDataBase().
Clauses
run():-
console::init(),
addItem(journal("AI in focus", "MIT Press")),
addItem(book( "Databases in Prolog",
n1("Wellesley Barros"))),
file::save("bibliography.fac", bib),
prtDataBase().
end implement main
goal
mainExe::run(main::run).
После создания базы данных и сохранения её в файл, вы можете использовать её в другой программе. Для проверки этой возможности, создайте консольный проект factread, и добавьте в него следующую программу:
% Файл main.pro
implement main
open core
domains
name= string.
author= n1(name); n2(name, name); etal(name).
publisher= string.
title= string.
volume= journal(title, publisher); book(title, author).
class facts – bib
num:integer := 0.
item:(volume, integer) nondeterm.
class predicates
prtDataBase:().
clauses
classInfo("main", "factread").
prtDataBase() :- item(V, I),
stdio::write(I, "=", V), stdio::nl,
fail.
prtDataBase().
Clauses
run():- console::init(),
file::consult("bibliography.fac", bib),
prtDataBase().
end implement main
goal
mainExe::run(main::run).
Вам надо переместить файл
bibliography.fac
Созданный приложением facttest, в папку factread/exe. Затем запустите программу:
factread.exe
Вы увидите, что программа прочтёт базу данных и распечатает её.