| Назва: | Мова логічного програмування "Пролог" |
| Тип: | Реферати |
| Мова: | Українська |
| Розмiр: | 32,59 KB |
| Скачувань: | 46 |
Частина тексту, яку варто цілком написати й налагодити, може мати різну довжину. Вона зростає в міру того, як програміст здобуває досвід. Досвідчений програміст, що пише на Пролозі, може відразу написати програму, текст якої займає кілька сторінок. При цьому він знає, що після запису тексту залишилося виконати лише досить просте й прозаїчне налагодження. Для менш досвідченого програміста може виявитися складним стежити за функціональністю й взаємодією одночасно великої кількості процедур.
Приклади
Приклад1
/*
База даних містить факти: людина(ім’я,вік). Програма має внутрішню мету, що заносить факти СБД в ДБД за допомогою методу ОПН, друкує отриману ДБД на екран, а потім знищує з неї всіх людей, вік яких старше 30 років і друкує частину, що залишилась в ДБД, додає нову інформацію в ДБД, друкує результуючу ДБД і зберігає її в файл "dbd.dat".
*/
domains
name = symbol
age = integer
database
dpeople(name,age)
predicates
people(name,age)
assert_db
create_db
retract_db
write_db
end
goal
makewindow(1,5,5,"DATABASE",0,0,25,80), clearwindow,
create_db, nl, write("1. Створена ДБД"),
nl, write_db, write(" Press any key"), readchar(_),nl,
nl, write("2. Знищується інформація про людей старше 30 років"),
retract_db, nl, write(" Залишок ДБД"), nl,
write_db, write(" Press any key"), readchar(_),nl,
nl, assert_db, write(" Результуюча ДБД"),nl,
write_db, write(" Press any key"), readchar(_), nl,
nl, write("4. Зберігаємо ДБД в файл"),nl, save("dbd.dat"),
write("Press any key"), readchar(_), end, removewindow.
clauses
people("Вася",32).
people("Коля",28).
people("Свєта",40).
create_db:- people(X,Y), assertz(dpeople(X,Y)), fail.
create_db.
retract_db:- dpeople(X,Y), Y>30, retract(dpeople(X,Y)), fail.
retract_db.
write_db:- dpeople(X,Y), write(X," ",Y), nl, fail.
write_db.
assert_db:- write("3. Додаємо інформацію"),nl,
write("Введіть ім’я "), readln(X),
write("Введіть вік "), readint(Y),
assertz(dpeople(X,Y)).
end:- dpeople(_,_),retractall(dpeople(_,_)),fail.
end.
Приклад 2
/* Навчальна програма (підрахунок населення у всіх містах бази даних з використанням комірки динамічної пам’яті (лічильника) */
DOMAINS
name=symbol
num=integer
DATABASE
ds(num)
PREDICATES
town(num,name,num)
rw(num,name,name,num)
proc(num)
make_win
menu
repeat
count(num,num)
dist(name,name,num)
dcount
GOAL
make_win, menu.
CLAUSES
town(1,"Донецьк",1250).
town(2,"Moсква",8000).
town(3,"Київ",5500).
town(4,"Харків",1300).
town(5,"ХХХ",10).
rw(1,"Донецьк","Харків",400).
rw(2,"Харків","Москва",650).
rw(3,"Донецьк","Київ",600).
rw(4,"Київ","Москва",700).
repeat.
repeat:-repeat.
make_win:- makewindow(1,7,7,"MENU",0,0,25,80), clearwindow,
makewindow(2,3,5,"PROC_1",10,10,14,60), clearwindow,
makewindow(3,6,6,"PROC_2",10,10,14,60), clearwindow,
makewindow(4,4,4,"PROC_3",10,10,14,60),clearwindow,
makewindow(5,5,5,"PROC_4",10,10,14,60),clearwindow.
menu:- repeat, shiftwindow(1), nl,nl, write("1 - process 1"),nl,
write("2 - process 2"),nl, write("3 - process 3"),nl,
write("4 - process 4"),nl, write("5 - EXIT"),nl,nl,
write("Enter your choice "),
readint(C), clearwindow, proc(C), C=5,
removewindow(1,1) , removewindow(2,1), removewindow(3,1),
removewindow(4,1), removewindow(5,1) .
proc(1):- shiftwindow(2), nl, write("Список міст"),
nl,nl, town(_,X,Y), write(X," ",Y),
nl, fail.
proc(1):- nl, write("Press any key"), readchar(_),
clearwindow.
proc(2):- shiftwindow(3), nl, write("Список міст з населенням більше даного"),
nl,nl, write("Input population "),
readint(P),nl,
town(_,X,Y), Y>P, write(X," ",Y), nl, fail.
proc(2):- nl, write("Press any key"), readchar(_),
clearwindow.
proc(3):- shiftwindow(4), nl,
write("Distance between 2 towns"),nl,
write("Input town A "),readln(A),nl,
write("Input town B "), readln(B),
dist(A,B,T),nl,
write("Dist. B/W 2 Cities - ",A," and ",B," is ",T),nl,
write("Press any key"), readchar(_),
clearwindow.
proc(5):- nl,nl,nl, write(" Bye! Press any key"),
readchar(_).
proc(4):- shiftwindow(5), nl, asserta(ds(0)),
dcount, ds(X),
write("Population in all towns is ",X),nl,nl,
write("Press any key"), readchar(_),
retractall(ds(_)), clearwindow.
count(N,Sum):- town(N,_,Y), SumNew=Sum+Y, Nnew=N+1,
count(Nnew,SumNew),!.
count(N,Sum):-nl,nl, N1=N-1,
write("Sum. Popul. in ", N1, " towns is ", Sum),
nl.
dcount:- town(_,_,Y), ds(X), Z=X+Y, retractall(ds(_)),
asserta(ds(Z)), fail.
dcount.
dist(A,B,T):- rw(_,A,B,T),!.
dist(A,B,T):- rw(_,B,A,T),!.
dist(A,B,T):- rw(_,A,C,T1), dist(C,B,T2), T=T1+T2,!.
Висновки
Приклади
Приклад1
/*
База даних містить факти: людина(ім’я,вік). Програма має внутрішню мету, що заносить факти СБД в ДБД за допомогою методу ОПН, друкує отриману ДБД на екран, а потім знищує з неї всіх людей, вік яких старше 30 років і друкує частину, що залишилась в ДБД, додає нову інформацію в ДБД, друкує результуючу ДБД і зберігає її в файл "dbd.dat".
*/
domains
name = symbol
age = integer
database
dpeople(name,age)
predicates
people(name,age)
assert_db
create_db
retract_db
write_db
end
goal
makewindow(1,5,5,"DATABASE",0,0,25,80), clearwindow,
create_db, nl, write("1. Створена ДБД"),
nl, write_db, write(" Press any key"), readchar(_),nl,
nl, write("2. Знищується інформація про людей старше 30 років"),
retract_db, nl, write(" Залишок ДБД"), nl,
write_db, write(" Press any key"), readchar(_),nl,
nl, assert_db, write(" Результуюча ДБД"),nl,
write_db, write(" Press any key"), readchar(_), nl,
nl, write("4. Зберігаємо ДБД в файл"),nl, save("dbd.dat"),
write("Press any key"), readchar(_), end, removewindow.
clauses
people("Вася",32).
people("Коля",28).
people("Свєта",40).
create_db:- people(X,Y), assertz(dpeople(X,Y)), fail.
create_db.
retract_db:- dpeople(X,Y), Y>30, retract(dpeople(X,Y)), fail.
retract_db.
write_db:- dpeople(X,Y), write(X," ",Y), nl, fail.
write_db.
assert_db:- write("3. Додаємо інформацію"),nl,
write("Введіть ім’я "), readln(X),
write("Введіть вік "), readint(Y),
assertz(dpeople(X,Y)).
end:- dpeople(_,_),retractall(dpeople(_,_)),fail.
end.
Приклад 2
/* Навчальна програма (підрахунок населення у всіх містах бази даних з використанням комірки динамічної пам’яті (лічильника) */
DOMAINS
name=symbol
num=integer
DATABASE
ds(num)
PREDICATES
town(num,name,num)
rw(num,name,name,num)
proc(num)
make_win
menu
repeat
count(num,num)
dist(name,name,num)
dcount
GOAL
make_win, menu.
CLAUSES
town(1,"Донецьк",1250).
town(2,"Moсква",8000).
town(3,"Київ",5500).
town(4,"Харків",1300).
town(5,"ХХХ",10).
rw(1,"Донецьк","Харків",400).
rw(2,"Харків","Москва",650).
rw(3,"Донецьк","Київ",600).
rw(4,"Київ","Москва",700).
repeat.
repeat:-repeat.
make_win:- makewindow(1,7,7,"MENU",0,0,25,80), clearwindow,
makewindow(2,3,5,"PROC_1",10,10,14,60), clearwindow,
makewindow(3,6,6,"PROC_2",10,10,14,60), clearwindow,
makewindow(4,4,4,"PROC_3",10,10,14,60),clearwindow,
makewindow(5,5,5,"PROC_4",10,10,14,60),clearwindow.
menu:- repeat, shiftwindow(1), nl,nl, write("1 - process 1"),nl,
write("2 - process 2"),nl, write("3 - process 3"),nl,
write("4 - process 4"),nl, write("5 - EXIT"),nl,nl,
write("Enter your choice "),
readint(C), clearwindow, proc(C), C=5,
removewindow(1,1) , removewindow(2,1), removewindow(3,1),
removewindow(4,1), removewindow(5,1) .
proc(1):- shiftwindow(2), nl, write("Список міст"),
nl,nl, town(_,X,Y), write(X," ",Y),
nl, fail.
proc(1):- nl, write("Press any key"), readchar(_),
clearwindow.
proc(2):- shiftwindow(3), nl, write("Список міст з населенням більше даного"),
nl,nl, write("Input population "),
readint(P),nl,
town(_,X,Y), Y>P, write(X," ",Y), nl, fail.
proc(2):- nl, write("Press any key"), readchar(_),
clearwindow.
proc(3):- shiftwindow(4), nl,
write("Distance between 2 towns"),nl,
write("Input town A "),readln(A),nl,
write("Input town B "), readln(B),
dist(A,B,T),nl,
write("Dist. B/W 2 Cities - ",A," and ",B," is ",T),nl,
write("Press any key"), readchar(_),
clearwindow.
proc(5):- nl,nl,nl, write(" Bye! Press any key"),
readchar(_).
proc(4):- shiftwindow(5), nl, asserta(ds(0)),
dcount, ds(X),
write("Population in all towns is ",X),nl,nl,
write("Press any key"), readchar(_),
retractall(ds(_)), clearwindow.
count(N,Sum):- town(N,_,Y), SumNew=Sum+Y, Nnew=N+1,
count(Nnew,SumNew),!.
count(N,Sum):-nl,nl, N1=N-1,
write("Sum. Popul. in ", N1, " towns is ", Sum),
nl.
dcount:- town(_,_,Y), ds(X), Z=X+Y, retractall(ds(_)),
asserta(ds(Z)), fail.
dcount.
dist(A,B,T):- rw(_,A,B,T),!.
dist(A,B,T):- rw(_,B,A,T),!.
dist(A,B,T):- rw(_,A,C,T1), dist(C,B,T2), T=T1+T2,!.
Висновки
Новости загрузка новостей...