Нужно подредактировать программу для возможности работы со строками - Prolog
Формулировка задачи:
Добрый день! Есть рабочий текст программы и бд которую он считывает. Мне нужно, что бы в этой бд вместо целых числе можно было писать текст. Пробовал менять тип домена (из integer на symbol и на char), но тогда программа не работает. Помогите пожалуйста, а то я в этом деле дуб.
CODE=12050
/* **************************
* КУРСОВАЯ РАБОТА *
* *
* *
**************************
*/
domains
i,c,d,f=integer
a,b,m,t=symbol
database -svod1
svod1(a,b,c,d,f,m,t)
database -lolo
lolo(a,b,c,d,f,m,t)
database -kuku
kuku(a,b,c,d,f,m,t)
database
svod(a,b,c,d,f,m,t)
predicates
start
patch
load
select(i)
sel(i,i)
process(i)
procedure(i)
sve(i)
lod(i)
repeat
goal
start.
clauses
/*Процедура создания основного меню и загрузки базы данных*/
start:-
makewindow(1,26,94,"КАТАЛОГ ФАКУЛЬТАТИВОВ",0,0,25,80),
clearwindow,
load,
patch.
/*Процедура управления основным меню*/
patch:-
repeat,
cursor(7,0),
write(" 0 - О пpогpамме... "),nl,
write(" 1 - коррекция данных"),nl,
write(" 2 - удаление данных"),nl,
write(" 3 - просмотр базы"),nl,
write(" 4 - загрузка базы"),nl,
write(" 5 - сохранение базы"),nl,
write(" 6 - создание новой базы"),nl,
write(" 7 - ввод новых данных"),nl,
write(" 8 - просмотр-добавление"),nl,
write(" 9 - выход из программы"),nl,
write(" =>"),
readint(Choice),
Choice >= 0,
Choice < 10,
clearwindow,
process(Choice),
clearwindow,
Choice = 9,
retractall(_),
removewindow.
/*Процедура поиска и загрузки файла содержащего базу данных*/
load:-
existfile("ilgiz.dat"),
consult("ilgiz.dat"),
cursor(1,2),
write("База загружена").
load:-
makewindow(2,74,79,"ОШИБКА",6,18,8,40),
cursor(2,10),
write("Нет базы на диске"),
readchar(_),
removewindow,
!.
/*Пpоцедуpа ввода новых данных*/
process(7):-
makewindow(1,2,7,"Ввод новых данных",0,0,25,80),
nl,
write("Введите название факультатива :"),readln(K),nl,
write("Введите Длительность факультатива :"),readln(O),nl,
write("Введите имя преподавателя :"),readint(I),nl,
write("Введите время начала :"),readint(Y),nl,
write("Введите Для каких классов проводится :"),readint(T),nl,
write("Введите кабинет :"),readln(FF),nl,
write("Введите дни проведения :"),readln(HH),nl,
N1=K,NA1=O,KO1=I,OB1=Y,PL1=T,FF1=FF,HH1=HH,
assertz(svod(N1,NA1,KO1,OB1,PL1,FF1,HH1)),
removewindow,
fail.
/*Процедура просмотра-добавления*/
process(8):-
makewindow(1,2,7,"Просмотр-добавление",0,0,25,80),
nl,
write("Введите Название факультатива:"),readln(A),nl,nl,
svod(KY,NA,N,OB,PL,FFF,HHH),
A=KY,
write("Название факультатива :"),write(KY),nl,
write("Длительность факультатива :"),write(NA),nl,
write("Имя преподавателя :"),write(N),nl,
write("Время начала :"),write(OB),nl,
write("Для каких классов проводится :"),write(PL),nl,nl,nl,
write("Кабинет :"),write(FFF),nl,
write("Дни проведения :"),write(HHH),nl,
write("Нажмите на любую клавишу"),
readchar(_),
removewindow,
!.
process(8):-
write("Этого названия факультатива нет в базе."),
write("Повторите введенное название факультатива и продолжайте ввод данных"),nl,nl,nl,
write("Введите Название факультатива:"),
readln(A),nl,
A=N1,
write("Введите Длительность факультатива :"),readln(F),nl,
write("Введите Имя преподавателя :"),readint(Y),nl,
write("Введите Время начала :"),readint(J),nl,
write("Введите Для каких классов проводится :"),readint(G),nl,
write("Введите Кабинет :"),readln(L),nl,
write("Введите Дни проведения :"),readln(M),nl,
NA1=F,KO1=Y,OB1=J,PL1=G,FF1=L,HH1=M,
assertz(svod(N1,NA1,KO1,OB1,PL1,FF1,HH1)),
removewindow,
fail.
/*Пpоцедуpа вывода данных о пpогpамме*/
process(0):-
makewindow(1,27,30,"О пpогpамме...",0,0,25,80),nl,nl,
write(" Инфоpмационно-спpавочная система"),nl,nl,
write(" обслуживающая работу с базои данных BSO"),nl,nl,
write(" Язык-TURBO-PROLOG v.2.0. "),nl,nl,
write(" автоp: Косячко Р. В. "),nl,nl,
write(" УГХТУ, 5-ИС (с) 2015 г. "),nl,
cursor(20,24),
write("Нажмите на любую клавишу"),
readchar(_),
removewindow.
/*Процедура изменения содержимого записей базы данных*/
process(1):-
makewindow(1,2,7,"Коppекция данных",0,0,25,80),
nl,
select(N),
X=N,
svod(KY,NA,X,OB,PL,FFF,HHH),
write("Название факультатива :"),write(N),nl,
write("Длительность факультатива :"),write(NA),nl,
write("Имя преподавателя :"),write(X),nl,
write("Время начала :"),write(OB),nl,
write("Для каких классов проводится :"),write(PL),nl,
write("Кабинет :"),write(FFF),nl,
write("Дни проведения :"),write(HHH),nl,
nl,
write("Введите Название факультатива:"),readln(N1),
write("Введите Длительность факультатива:"),readln(NA1),nl,
write("Введите Имя преподавателя:"),readint(KO1),nl,
write("Введите Время начала:"),readint(OB1),nl,
write("Введите Для каких классов проводится:"),readint(PL1),nl,
write("Введите Кабинет:"),readln(FF1),nl,
write("Введите Дни проведения:"),readln(HH1),nl,
retract(svod(KY,NA,KO,OB,PL,FFF,HHH)),
assert(svod(N1,NA1,KO1,OB1,PL1,FF1,HH1)),
!,
removewindow.
/*Процедура удаления записей из базы данных*/
process(2):-
makewindow(1,2,7,"Удаление записей",0,0,25,80),
nl,
select(N),
X=N,
svod(KY,NA,X,OB,PL,FFF,HHH),
retract(svod(KY,NA,X,OB,PL,FFF,HHH)),!,
removewindow.
/*Процедура просмотра содержимого базы данных*/
process(3):-
makewindow(1,2,7,"Просмотp базы",0,0,25,80),
nl,
write("============================================================================="),nl,
write("| КАТАЛОГ ФАКУЛЬТАТИВОВ |"),nl,
write("============================================================================="),nl,
write("|Название |Длительность|Имя |Время |Для каких |Кабинет|Дни |"),nl,
write("| | |преподавателя|начала|классов | |проведения| "),nl,
write("============================================================================="),nl,
svod(KY,NA,N,OB,PL,FFF,HHH),
cursor(Z,_),
cursor(Z,2),write(KY),
cursor(Z,12),write(NA),
cursor(Z,27),write(N),
cursor(Z,35),write(OB),
cursor(Z,46),write(PL),
cursor(Z,0),write("|"),
cursor(Z,56),write(FFF),
cursor(Z,67),write(HHH),
nl,
fail.
process(3):-
write("------------------------------------------------------------------------------"),
nl,
write("Нажмите на любую клавишу"),
readchar(_),
removewindow.
/*Процедура загрузки в память базы данных*/
process(4):-
nl,
makewindow(2,15,4,"Загрузка",5,5,20,70),
write("1 - База будет загружена из указанного файла"),nl,
write("2 - База будет загружена из файла ilgiz.dat"),nl,
write("3 - Выход в основное меню"),nl,
write("==>"),
readint(C),
C>0,C<4,
lod(C),
!,
removewindow.
/*Процедура сохранения базы данных*/
process(5):-
nl,
makewindow(2,15,4,"Запись",5,5,20,70),
write("1 - База будет записана в указанный файл"),nl,
write("2 - База будет записана в файл ilgiz.dat"),nl,
write("3 - Выход в основное меню"),nl,
write("==>"),
readint(I),
I>0,I<4,
sve(I),!,
removewindow.
/*Процедура выбора создания новой базы*/
process(6):-
nl,
makewindow(3,2,7,"Создание новой базы",0,0,25,80),
write("1 - База будет создана по Название факультативау "),nl,
write("2 - База будет создана по году вступления в эксплуатацию"),nl,
write("3 - База будет создана по смете стоимости "),nl,
write("4 - Выход в основное меню"),nl,
write("==>"),
readint(O),
O>0,O<5,
procedure(O),
removewindow.
process(_).
/*Процедура создания новой базы данных и ее сохранения*/
procedure(1):-
makewindow(1,2,7,"Создание новой базы по Название факультативау",0,0,25,80),
nl,
cursor(7,10),
retractall(_,svod1),
nl,
write("Если вы хотите узнать данные , то"),
nl,
write("Введите Название факультатива:"),
readln(X),
svod(KY,NA,N,OB,PL,FFF,HHH),
S=KY,
S=X,
NA1=Na,KO1=N,OB1=OB,PL1=PL,FF1=FFF,HH1=HHH,
assert(svod1(S,NA1,KO1,OB1,PL1,FF1,HH1)),
fail.
procedure(1):-
write("База создана"),nl,
write("______________________________________________________________________________"),
write(" КАТАЛОГ ФАКУЛЬТАТИВОВ !"),
write("------------------------------------------------------------------------------"),
write("! ! ! код !год ! смета ! адрес !"),
write("! Название факультатива ! Длительность факультатива ! СМУ !вступления в!стоимости! ----------------------"),
write("! ! ! !эксплуатацию! ! раион ! Дни проведения !"),
write("------------------------------------------------------------------------------"),
nl,
svod1(S,NA,N,OB,PL,FFF,HHH),
cursor(Z,_),
cursor(Z,2),write(S),
cursor(Z,12),write(NA),
cursor(Z,27),write(N),
cursor(Z,35),write(OB),
cursor(Z,46),write(PL),
cursor(Z,56),write(FFF),
cursor(Z,67),write(HHH),
nl,
fail.Решение задачи: «Нужно подредактировать программу для возможности работы со строками»
textual
Листинг программы
database -svod1 svod1(a,b,c,d,f,m,t) database -lolo lolo(a,b,c,d,f,m,t) database -kuku kuku(a,b,c,d,f,m,t) database svod(a,b,c,d,f,m,t)