Распечатать страницу

Лекция №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

Вы увидите, что программа прочтёт базу данных и распечатает её.