Конспект лекций по дисциплине "Программное обеспечение интеллектуальных систем". Для магистров специальности 5А521902




Скачать 401.76 Kb.
НазваниеКонспект лекций по дисциплине "Программное обеспечение интеллектуальных систем". Для магистров специальности 5А521902
страница4/4
Дата27.12.2012
Размер401.76 Kb.
ТипКонспект
1   2   3   4

Лекция №9.

Логические возможности Пролога.

План Лекции

  1. Возможности Пролога.

  2. Реализация вспомогательных функций на Прологе.

Ключевые слова


Арифметические операции.

Операции отношения.

Логические операции.

Функции.

Логические возможности Пролога.

С помощью правил можно описать какой-либо процесс принятия решения или логический вывод. В этом случае в программе могут использоваться не только встроенные механизмы вывода или вывод, смысл которого сводится просто к поиску объекта в базе фактов, но и собственные пользовательские правила принятия решения.

Рассмотрим пример программы (см. пример 10), в которой определяется родственная связь на основе неявно заданных фактов, т.е. в базе отсутствуют факты типа «Объект_1 является_сестрой Объекта_2». В соответствии с примером, если ввести имя «Таня», то результатом вывода будет фраза: « Имеется брат Борис».

Пример 10. Определение родственной связи

Domains s=string

Predicates

start w(s) p(s,s,s) per(s) is_rs(s,s) m(s) wiw(s)

Goal start.

Clauses

start:- makewindow(1,52,37,"Определение родственной связи",0,0,25,80),

write(" Введите имя : "),readln(X),nl,per(X).

per(X):- is_rs(X,Y),X<>Y,wiw(Y),fail. % основное правило проверки

per(X):- nl,nl,write("Конец поиска."), readchar(_).

% правило проверки общих родителей

is_rs(X,Y):- p(X,M,F),p(Y,M,F).

% уточнение и вывод родственной связи

wiw(Y):-w(Y),write(" Имеется сестра ",Y),nl,!.

wiw(Y):-m(Y),write(" Имеется брат ",Y,"."),nl,!.

% база фактов женщин

w("Катя"). w("Света"). w("Таня").

% база фактов мужчин

m("Дима"). m("Борис"). m("Вася").

% база фактов родителей

p("Катя","Лена","Сергей"). p("Света","Галина","Сергей").

p("Таня","Зоя","Костя"). p("Дима","Лена","Сергей").

p("Вася","Лена","Сергей"). p("Борис","Зоя","Костя").

Реализация вспомогательных функций на Прологе.

В Турбо-Прологе имеется много встроенных предикатов для реализации вспомогательных функций, которые облегчают создание больших систем. Перечислим некоторые из них:

  1. вывод и просмотр файла (строки) со скроллингом;

  1. редактирование файла (строки);

  1. вывод текущего каталога;

  1. реализация многооконного интерфейса и т.д.

Однако, это не все функции, которые требуется реализовать при создании больших систем.

В примерах 11a и 11b приведены программы реализации меню. В примере 11a пункты меню можно выбирать с помощью клавиш стрелок, а в примере 11b дополнительно с помощью мышки.

Пример 11a.

Constants

cz=63 %цвет пункта

col=28 %цвет пометки

Domains i = integer s = string c = char

Database ar(i,i)

Predicates r_k(i) c_k(i,i) p(i,s,i,i,i) o(i,i,i) bor an(i,i) start menu(i,i)

Goal start.

Clauses

start:- makewindow(1,0,0,"",0,0,25,80),

makewindow(2,63,118," Г Л А В Н О Е М Е Н Ю ",4,12,8,48),

menu(1,4),p(1,A,Y,X,_),str_len(A,L),field_attr(Y,X,L,col),

assert(ar(80,1)),bor,!.


% Вывод пунктов

menu(X,Y):- p(X,A,Y1,X1,C),cursor(Y1,X1),write(A),

str_len(A,L),field_attr(Y1,X1,L,C),X2=X+1,X
menu(X,Y):-X=Y,!.


% Циклическое считывание кода

bor:- ar(K,R),r_k(K1), an(K1,R),fail.

bor:- bor.

/* основное пpавило в меню */

an(Kod,R):- p(R,A,Y,X,C), o(R,Kod,Rs),

p(Rs,As,Ys,Xs,Cs),o(Rs,Ks,_),str_len(A,L),str_len(As,Ls),

field_attr(Y,X,L,C),field_attr(Ys,Xs,Ls,col),

retractall(ar(_,_)),assert(ar(Kod,Rs)),!.

% Исполнение пунктов

% an(Kod,R):-R=1,Kod=13,.......

%..............................

an(Kod,R):-R=4,Kod=13,exit,!.

an(Kod,R):-!.


% Определяем номер пункта

o(R,K,X):-K=80,X=R+1. o(R,K,X):-K=72,X=R-1.


% Чтение расширенного кода

r_k(Kod):- readchar(C),char_int(C,A),c_k(A,Kod),!.

c_k(A,Kod):- A<>0,Kod=A,!.

c_k(0,Kod):- readchar(C),char_int(C,Kod),!.


% Факты пунктов меню - Номер пунка, пункт,координаты, цвет

p(1," 1. Режим пpосмотpа и pедактиpования",1,2,cz).

p(2," 2. Режим pаботы с файлами",2,2,cz).

p(3," 3. Режим многоаспектного поиска",3,2,cz).

p(4," 4. Выход",4,2,cz).


Пример 11b.

Constants

cz0=63 % начальный цвет пунктов меню

col=28 % цвет пометки пунктов меню

c1=63 % цвет фона главного окна

c2=118 % цвет рамки

kp=5 % количество пунктов в меню

Domains i = integer s = string r=real

Database ar(i,i) mn(i,i,i)

Predicates

mkw(i,i,i,s,i,i,i,i) rmw

r_k(i) c_k(i,i) ko(i,s,i,i,i) ord(i,i,i)

bor an(i,i) start menu(i,i) ed_ar(i,i) uz(i,i,s)

codm(i,i) ed_mn(i,i,i) my(i,i) pm(i,i) zn(i) initm

Goal initm,% инициализация мыши

start.% запуск меню

Clauses

start:- mkw(1,31,52," ОТДЕЛ ГРАФИЧЕСКИХ СИСТЕМ ",0,0,25,80),

Xnt=22,mkw(2,0,0,"",8,Xnt,9,33),

Xn=Xnt-2,mkw(3,c1,c2," Г Л А В Н О Е М Е Н Ю ",7,Xn,9,33),

menu(1,kp),pm(1,1),zn(Xn), ed_ar(80,1),bor,!.

% Вывод пунктов меню с помощью рекурсивного правила

menu(X,Y):- ko(X,A,Y1,X1,C),cursor(Y1,X1),write(A),

str_len(A,L),field_attr(Y1,X1,L,C),X2=X+1,X
menu(X,Y):-X=Y,!.

% создание окна

mkw(A1,A2,A3,S,B1,B2,B3,B4):-makewindow(A1,A2,A3,S,B1,B2,B3,B4,1,255,"г¬L-=¦").

rmw:-removewindow,!. % удаление окна

% главный цикл опроса

bor:- keypressed,ar(_,R),r_k(K), an(K,R),fail.

bor:- codm(K,R),an(K,R),fail,!.

bor:- bor.

/* основное пpавило в меню */

an(Kod,R):- ko(R,A,Y,X,C),ord(R,Kod,Rs), pm(1,Rs),pm(0,R),ed_ar(Kod,Rs),!.

an(Kod,R):-uz(R,Kod,S),existfile(S),!.

an(Kod,R):-uz(R,Kod,S),mkw(26,112,67,"",4,10,3,52),cursor(0,5),

write(" ФАЙЛ ",S," отсутствует ! "),readchar(_),rmw,!.

an(Kod,R):-R=5,Kod=13,mkw(10,7,0,"",0,0,25,80), exit,!.

an(Kod,R):-!.

% факты срабатывания пункта меню

% номер пункта, код срабатывания, имя файла

uz(1,13,"form.exe").uz(2,13,"registr.exe").

uz(3,13,"report.exe").uz(4,13,"servis.exe").

% модификация служебной базы

ed_ar(A,B):-retractall(ar(_,_)),assert(ar(A,B)),!.

% определение следующего пункта меню

ord(R,Kod,Rs):-R
ord(R,Kod,Rs):-R>1,Kod=72,Rs=R-1.

% факты пунктов меню

% ko(номер пункта,имя пункта,координата по Y, координата по X, цвет)

ko(1,"1. Формирование заказа",1,2,cz0).

ko(2,"2. Регистрация клиента",2,2,cz0).

ko(3,"3. Формирование отчета",3,2,cz0).

ko(4,"4. Сервисные функции",4,2,cz0).

ko(5,"5. Выход",5,2,cz0).

%Чтение (расширенного) кода

r_k(Kod):- readchar(C), char_int(C,A),c_k(A,Kod),!.

c_k(A,Kod):- A<>0,Kod=A,!.

c_k(0,Kod):- readchar(C),char_int(C,Kod),!.

% пометка или разметка пунктов меню

pm(1,R):-ko(R,A,Y,X,_),str_len(A,L),field_attr(Y,X,L,col),!.

pm(0,R):-ko(R,A,Y,X,C),str_len(A,L),field_attr(Y,X,L,C),!.

pm(N,R).

% Правила для мышки

initm:- bios($33, reg(0,0,0,0,0,0,0,0),reg(_,_,_,_,_,_,_,_)),

bios($33, reg(1,0,0,0,0,0,0,0), reg(_,_,_,_,_,_,_,_)),!.

initm.

codm(K,R):- bios($33, reg(3,0,0,0,0,0,0,0),reg(_,M,X,Y,_,_,_,_)),M=1,

my(Y,R),mn(R,Xn,Xk),X>=Xn,X<=Xk, ar(_,Rr),pm(0,Rr),

pm(1,R),ed_ar(0,R),K=13,!.

my(72,1).my(80,2).my(88,3).my(96,4).my(104,5).

zn(O):- ko(R,A,Y,X,_),str_len(A,L),Xn=(O+X+1)*8,Xk=Xn+L*8-1,ed_mn(R,Xn,Xk),fail.

zn(O).

ed_mn(R,Xn,Xk):-retractall(mn(R,_,_)),assert(mn(R,Xn,Xk)),!.


В примерах 12a и 12b показано, как можно организовать поиск слова в строке (файле).


Пример 12a.


% разбор и поиск слова в файле

Domains

i = integer s = string c = char file=f

list=integer* % список целых чисел

Database

b(s) slo(i,s) n(i)

Predicates

start del tmp(i,s)

Goal start.


Clauses

start:-makewindow(1,1,7,"",0,0,25,80),makewindow(2,27,47,"",5,10,15,59),

file_str("a.pro",S),

% S="aaa bbb ccc ddd eee ", nl,write(S),

retractall(b(_)),assert(b(S)),

retractall(n(_)),assert(n(0)),

retractall(slo(_,_)),assert(slo(0,"")),

del.

del:-b(S),S<>"",fronttoken(S,S1,S2),n(N),N1=N+1,assert(slo(N1,S1)),

nl, write(N1,". ",S1), tmp(N1,S1),retractall(b(_)),assert(b(S2)),

retractall(n(_)),assert(n(N1)),fail,!.

del:-b(""),!.

del:-del.

tmp(N,"ccc"):-Write(" - это слово ссс"),!.

tmp(N,S).


Пример 12b.

%Поиск слова в строке

Domains

i = integer s = string c = char file=f

list=integer* % список целых чисел

Database

sp(i,s,i)

s(s) b(s) slo(i,s) n(i)


Predicates

start del wiw

Goal start.


Clauses

start:-retractall(_),

makewindow(1,1,7,"",0,0,25,80),

makewindow(2,27,47,"Введите слово для поиска",5,10,15,59),

S="aaa bbb ccc ddd eee fff ggg",write(S),nl,

readln(Sp),str_len(Sp,L),

assert(sp(L,Sp,0)),assert(s(S)),assert(b(S)),assert(n(0)),

del,wiw.

del:-b(S),sp(L,Sp,_),frontstr(L,S,S1,S2),

S1=Sp,n(N),retractall(sp(_,_,_)),assert(sp(L,Sp,N)),!.

del:-b(S),frontchar(S,C,Sz),retractall(b(_)),assert(b(Sz)),

n(N),retractall(n(_)),N1=N+1,assert(n(N1)),fail.

del:-b(""),!.

del:-del.

wiw:-sp(L,S,N),N<>0,s(Si),nl,write(Si),

cursor(Y,X),cursor(Y,N),field_attr(Y,N,L,56),

readchar(_),!.

wiw:-sp(L,S,0),nl,write(S," - не найдено"), readchar(_),!.


Приложение

Краткий список встроенных предикатов.

(полный список приведен в файле prolog.hlp)

Предикаты ввода.

readln(StringVariable) - читает строку.

readint(IntgVariable) - читает целое число.

readreal(RealVariable) - читает действительное число.

eadchar(CharVariable) - читает символ.

file_str(DosFileName,StringVariable) - читает строку из файла.

inkey(CharVariable) - читает ключ (символ).

keypressed - проверяет, нажата ли клавиша.


Предикаты вывода.

write( Variable|Constant * ) - производит запись на текущее устройство вывода.

nl - перевод строки.

Предикаты для работы с файлами.

openread(SymbolicFileName,DosFileName) - открывает файл для чтения.

openwrite(SymbolicFileName,DosFileName) - открывает файл для записи.

openappend(SymbolicFileName,DosFileName) - открывает файл для добавления.

openmodify(SymbolicFileName,DosFileName) - открывает файл для чтения/записи.

readdevice(SymbolicFileName) - определяет или считывает символическое имя файла

устройства ввода.

writedevice(SymbolicFileName) - определяет или считывает символическое имя файла

устройства вывода.

filemode(SymbolicFileName,FileMode) - установка или чтение типа файла.

closefile(SymbolicFileName) - закрывает файл.

filepos(SymbolicFileName,FilePosition,Mode) - установка или чтение позиции указателя.

eof(SymbolicFileName) - проверка на конец файла

flush(SymbolicFileName) - очищает содержимое буфера.

existfile(DosFileName) - проверка существования файла.

deletefile(DosFileName) - удаляет файл.

renamefile(OldDosFileName,NewDosFileName) - переименовывает файл.

disk(DosPath) - устанавливает или показывает накопитель или путь.

Предикаты экрана.

scr_attr(Row,Column,Attr) - устанавливает или считывает атрибут.

field_str(Row,Column,Length,String) - записывает или читает строку.

field_attr(Row,Column,Length,Attr) - устанавливает или читает атрибут поля экрана.

cursor(Row,Column) - считывает или устанавливает позицию курсора.

cursorform(Startline,Endline) 0
- считывает или устанавливает форму курсора.

attribute(Attr) - считывает или устанавливает цвет фона текущего окна.

Предикаты работы с окнами.

makewindow(WindowNo,ScrAtt,FrameAtt,Framestr,Row,Column,Height,Width)

- - создает окно.

shiftwindow(WindowNo) - меняет текущее окно или считывает номер текущего окна.

gotowindow(WindowNo)- -активизирует окно с заданным номером.

existwindow(WindowNo) - проверяет существование окна.

removewindow - удаляет текущее окно.

clearwindow - чистка окна.

window_str(ScreenString) - записывает (или считывает) строку в текущее окно

window_attr(Attribute) - определяет атрибуты текущего окна

scroll(NoOfRows,NoOfCols) - сдвиг содержимого текущего окна.

Предикаты для работы со строками.

frontchar(String,FrontChar,RestString) - разделяет заданную строку на первый символ и

оставшуюся часть.

fronttoken(String,Token,RestString) - разделяет строку на лексему и остаток.

frontstr(Lenght,Inpstring,StartString,RestString) - разделяет строку на две части,

количество первой части равно Lenght.

concat(String1,String2,String3) - String3 = String1 + String2.

str_len(String,Length) - определяет длину строки.

Предикаты преобразования данных.

char_int(CharParam,IntgParam) - преобразует символ в целое число или наоборот.

str_int(StringParam,IntgParam) - преобразует строку в целое число или наоборот.

str_char(StringParam,CharParam) - преобразует строку в символ или наоборот.

str_real(StringParam,RealParam) - преобразует строку в действительное число

или наоборот.

upper_lower(StringInUpperCase,StringInLowerCase) - преобразует прописные буквы в

строчные и наоборот.

Предикаты баз данных.

consult(DosFileName) - загружает или добавляет текстовый файл базы данных в ОП.

consult(DosFileName,InternalDatabaseName) - загружает в ОП группу поименованную

группу фактов.

save(DosFileName) - записывает на диск все факты динамической БД.

save(DosFileName,InternalDatabaseName) - записывает на диск поименованную

группу фактов БД.

assert( Term ) - добавляет факт БД в ОП.

retractall(Term) - удаляет все факты с указанным термом.

retractall(_, InternalDbaseName ) - удаляет все факты поименованной группы.

Предикаты для работы с редактором.

display(String) - ) - показывает в текущем окне строку(до 64Кбайт).

edit(InputString,OutputString) - вызов редактора.

editmsg(InputString,OutputString,Headstr,Headstr2,Msg,Pos,Helpfilename,RetStatus) -

вызов редактора с дополнительными возможностями.

Системные предикаты.

system(DosCommandString) - выполнение команд DOS.

dir(Path,Filespec,Filename) - выводит текущий каталог.

comline(LineBuffer) - читает параметры командной строки.

port_byte(PortNo,Value) - посылает байт в порт или читает его из порта.

ptr_dword(8086Ptr,Segment,Offset) - читает строку или адрес строки.

memword(Segment,Offset,Word) - запоминаетр или считывает

слово по заданному адресу.

membyte(Segment,Offset,Byte) - запоминает или считывает байт.

bios(Interruptno,reg(AXi,BXi,CXi,DXi,SIi,DIi,DSi,ESi),

reg(AXo,BXo,CXo,DXo,SIo,DIo,DSo,ESo)) - объявляет прерывания

для вызова процедур BIOS/

exit - выход из программы.

storage(StackSize,HeapSize,TrailSize) - определяет размер имеющейся памяти.

sound(Duration,Frequency) - звуковой сигнал с параметрами.

beep - звуковой сигнал.

date(Year,Month,Day) - установка или считывание даты.

time(Hours,Minutes,Seconds,Hundredths) - устанавливает или считывает

системное время.

findall( Variable, Atom, ListVariable ) - собирает значения, возникающие

в процессе бектрегинга, в список.

free( Variable ) - проверяет свободная ли переменная.

bound( Variable ) - проверяет связана ли переменная.

Арифметические операции.

+, -, *, /, mod, div

Операции отношения.

>, <, =, >=, <=, <>, ><

Логические операции.

not( Atom ) - отрицание.

and , or

Функции.

sin, cos, tan, arctan, ln, log, exp, sqrt, round, trunc, abs


ЛИТЕРАТУРА


1. Ц. Ин, Д. Соломон "Использование Турбо Пролога» М,Мир,1993.

2."Логическое программирование сборник статей под ред. Агафонова М., Мир, 1988.

3.Дж.Доорс,А.Р.Рейблейн,"Пролог-язык программирования будущего» М, Фин. и Стат., 1990.

4.Братко И. "Программирование на языке Пролог для "ЦЦ" М,Мир,1990

5.Алешина М. и др. "Логика и компьютер" М., Наука 1990.


6.С. Чери, Г. Готлоб, "Логическое программирование и базы данных»
1   2   3   4

Похожие:

Конспект лекций по дисциплине \"Программное обеспечение интеллектуальных систем\". Для магистров специальности 5А521902 iconО. Л. Молдованова Документационное обеспечение управления
Конспект лекций предназначен для студентов всех форм обучения по специальности 0801110 «Экономика и бухгалтерский учет (по отраслям)»...
Конспект лекций по дисциплине \"Программное обеспечение интеллектуальных систем\". Для магистров специальности 5А521902 iconРабочая программа по дисциплине Архитектура вычислительных систем Для специальности 230105(220400) Программное обеспечение вычислительной техники и автоматизированных систем
Рабочая программа составлена в соответствии с гос во по специальности 230105 Программное обеспечение вычислительной техники и автоматизированных...
Конспект лекций по дисциплине \"Программное обеспечение интеллектуальных систем\". Для магистров специальности 5А521902 iconРабочая программа По дисциплине “Преддипломная практика" Для специальности 230105 (220400) "Программное обеспечение вычислительной техники и автоматизированных систем"
Гос во по специальности 230105 (220400) – Программное обеспечение вычислительной техники и автоматизированных систем, утвержденного...
Конспект лекций по дисциплине \"Программное обеспечение интеллектуальных систем\". Для магистров специальности 5А521902 iconРабочая программа по дисциплине «проектирование систем управления и менеджмента» для специальности 230105 “Программное обеспечение вычислительной техники и автоматизированных систем”
Рабочая программа составлена на основании гос впо для специальности 230105 «Программное обеспечение вычислительной техники и автоматизированных...
Конспект лекций по дисциплине \"Программное обеспечение интеллектуальных систем\". Для магистров специальности 5А521902 icon«Программное обеспечение ЭВМ и информационные технологии» мгту им. Н. Э. Баумана 2011
В настоящее время кафедра готовит как бакалавров и магистров, так и дипломированных специалистов – инженеров по специальности 2204...
Конспект лекций по дисциплине \"Программное обеспечение интеллектуальных систем\". Для магистров специальности 5А521902 iconМетодические указания составлены в соответствии с рабочей программой по дисциплине «Программное обеспечение компьютерных сетей»
...
Конспект лекций по дисциплине \"Программное обеспечение интеллектуальных систем\". Для магистров специальности 5А521902 iconРабочая программа По дисциплине “Методы оптимизации" для специальности 230105 "Программное обеспечение вычислительной техники и автоматизированных систем"
По дисциплине “Методы оптимизации" для специальности 230105 "Программное обеспечение вычислительной техники и автоматизированных...
Конспект лекций по дисциплине \"Программное обеспечение интеллектуальных систем\". Для магистров специальности 5А521902 iconПрограмма курса «Технологии и языки Internet-программирования» разработана для студентов специальности 1-40 01 01 «Программное обеспечение информационных технологий»
Д. В. Антоник, старший преподаватель кафедры программного обеспечения интеллектуальных и компьютерных систем
Конспект лекций по дисциплине \"Программное обеспечение интеллектуальных систем\". Для магистров специальности 5А521902 iconУчебно-методический комплекс по дисциплине “Базы данных“ для специальности 230105 программное обеспечение вычислительной техники и автоматизированных систем
Базы данных“ для специальности 230105 – программное обеспечение вычислительной техники и автоматизированных систем
Конспект лекций по дисциплине \"Программное обеспечение интеллектуальных систем\". Для магистров специальности 5А521902 iconКонспект лекций по дисциплине «Основы лесоводства и лесной таксации»
Конспект лекций предназначен для студентов заочного отделения указанной специальности
Разместите кнопку на своём сайте:
Библиотека


База данных защищена авторским правом ©lib.znate.ru 2014
обратиться к администрации
Библиотека
Главная страница