Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
16
Добавлен:
17.04.2013
Размер:
21.26 Кб
Скачать


6. Џ®бв஥­ЁҐ нЄбЇҐав­ле бЁб⥬.

ќЄбЇҐав­лҐ бЁб⥬л (ќ‘) пў«повбп ¤®бв в®з­® Ї®Їг«па­л¬ ­ Їа ў«Ґ­ЁҐ¬
Ёбб«Ґ¤®ў ­Ё© ў ®Ў« бвЁ ЁбЄгбб⢥­­®Ј® Ё­вҐ««ҐЄв . €¬ҐҐвбп 㦥
¤®бв в®з­® Ў®«ми®© ®Їлв Є®¬¬ҐазҐбЄ®Ј® ЁбЇ®«м§®ў ­Ёп в ЄЁе Їа®Ја ¬¬ Ё
Ў®Ј в п «ЁвҐа вга  Ї® Ёе Ї®бв஥­Ёо Ё ЁбЇ®«м§®ў ­Ёо. Ћ¤­ Є® ⥬  ҐйҐ
­Ґ § Єалв , в Є Є Є ®бв овбп ­ҐаҐиҐ­­лҐ § ¤ зЁ - Ї®«г祭Ёп б ¬Ёе
§­ ­Ё© ®Ў Є®­ЄаҐв­ле ®Ў« бвпе Ё § Ї®«­Ґ­Ёп Ё¬Ё ®Ў®«®зҐЄ ќ‘,
б ¬®®Ўг祭ЁҐ ќ‘, ®ЎйҐ­ЁҐ ­  ҐбвҐб⢥­­®¬ п§лЄҐ Ё в.¤.
‚宦¤Ґ­ЁҐ ў Їа®Ў«Ґ¬ вЁЄг ¬Ґв®¤®ў Ї®бв஥­Ёп ќ‘ ҐбвҐб⢥­­® ­ з вм б
Їа®Ја ¬¬ Џа®«®Ј , Є®в®алҐ ў Їа®б⥩襬 ўЁ¤Ґ пў«повбп ќ‘, в Є Є Є ­ 
ўе®¤­®© § Їа®б «®ЈЁзҐбЄЁ ўлў®¤п⠢ᥠў®§¬®¦­лҐ аҐиҐ­Ёп Ё§ Ё¬ҐойЁебп
Їа ўЁ« Ё д Єв®ў. ’ ЄЁҐ ќ‘ ­ §лў овбп "а Ў®в ойЁ¬Ё ­  Їа ўЁ« е".
ЏаЁўҐ¤Ґ¬ ЇаЁ¬Ґа в Є®© Їа®Ја ¬¬л.

database /* Ў §  ¤ ­­ле ¤«п § Ї®¬Ё­ ­Ёп ўҐ¤Ґ­­ле ®вўҐв®ў */
xpositive(symbol, symbol)
xnegative(symbol, symbol)
predicates
do_expert_job
do_consulting
ask(symbol,symbol)
dog_is(symbol)
it_is(symbol)
positive(symbol,symbol)
negative(symbol,symbol)
remember(symbol,symbol,symbol)
clear_fact
goal
do_expert_job
clauses /* б®®ЎйҐ­ЁҐ ® бЁб⥬Ґ */
do_expert_job:-
makewindow(1,7,7,"ќЄбЇҐав­ п бЁб⥬ ",1.16,22,58),
nl, write("*************************"),
nl, write(" ‚室 ў нЄбЇҐав­го бЁб⥬г "),
nl, write(" ЋЇаҐ¤Ґ«Ґ­ЁҐ Ї®а®¤ б®Ў Є"),
nl, write(" ЋвўҐвм⥠­  ў®Їа®бл ®"),
nl, write("ў иҐ© б®Ў ЄҐ"),
nl, write(" 'yes' Ё«Ё 'no' "),
nl, write("*************************"),
nl, nl,
do_consulting, write("Ќ ¦ вм Є« ўЁиг"),
nl,readch(_), removewindow, exit.
/* ®б­®ў­®© ЇаҐ¤ЁЄ в dog_is */
do_consulting:-
dog_is(X),!,nl,write("Џ®а®¤  ў иҐ© б®Ў ЄЁ: ",X,"."),
nl, clear_fact.
do_consulting:- nl,write("ЌҐ ¬®Јг ®ЇаҐ¤Ґ«Ёвм!"),
clear_fact.
/* ў®Їа®б " Ё¬ҐҐв «Ё б®Ў Є " <бў®©бвў® Y> */
ask(X,Y):-
write(" ‚®Їа®б :-",X, " б®Ў Є  ", Y," ?"),
readln(Reply),
remember(X,Y,Reply). /* § Ї®¬Ё­ ­ЁҐ ®вўҐв  */
/* Їа®ўҐаЄ  ­  ­ «ЁзЁҐ ®вўҐв  ­  ¤ ­­л© ЇаЁ§­ Є ў Ѓ„ */
positive(X,Y):- xpositive(X,Y),!.
positive(X,Y):- not(negative(X,Y)),!, ask(X,Y).
negative(X,Y):- xnegotive(X,Y),!.
/* § Ї®¬Ё­ Ґ­ЁҐ ®вўҐв  ў Ѓ„ */
remember(X,Y,yes):- asserta(xpositive(X,Y)).
remember(X,Y,no):- asserta(xnegative(X,Y)).
clear_fact:- retract(xpositive(_,_)), fail.
clear_fact:- retract(xnegative(_,_)), fail.
/* ®б­®ў­лҐ ९தгЄжЁ®­­лҐ Їа ўЁ«  ќ‘ */
dog_("English Bulldog"):-
it_is("short-haired dog"),
positive(has,"height under 22 inch"),
positive(has,"low-set tail"),
positive(has,"good natured personality").

dog_("Beagle"):-
it_is("short-haired dog"),
positive(has,"height under 22 inch"),
positive(has,"longer ears"),
positive(has,"good natured personality").

dog_("Gread Dane"):-
it_is("short-haired dog"),
positive(has,"weight over 100 lb"),
positive(has,"low-set tail"),
positive(has,"good natured personality").

dog_("American Foxhound"):-
it_is("short-haired dog"),
positive(has,"height under 30 inch"),
positive(has,"longer ears"),
positive(has,"good natured personality").

dog_("Cocker Spanial"):-
it_is("long-haired dog"),
positive(has,"height under 22 inch"),
positive(has,"low-set tail"),
positive(has,"longer ears"),
positive(has,"good natured personality").

dog_("Iresh Setter"):-
it_is("long-haired dog"),
positive(has,"height under 30 inch"),
positive(has,"long ears").

dog_("Collie"):-
it_is("long-haired dog"),
positive(has,"height under 30 inch"),
positive(has,"low-set tail"),
positive(has,"good natured personality").

dog_("St. Bernard"):-
it_is("long-haired dog"),
positive(has,"weight over 100 lb"),
positive(has,"low-set tail"),
positive(has,"good natured personality").

it_is(short-haired dog):- positive(has,"short_haired"),!.
it_is(short-haired dog):- positive(has,"long_haired"),!.

Љ Є ўЁ¤­® Ё§ Ї®Ја ¬¬л §­ ­Ёп ® Ї®а®¤ е б®Ў ЄЁ Ёе бў®©бвў е
а §¬ҐйҐ­л ў Їа ўЁ« е Їа®Ја ¬¬л, зв® ­Ґ ўбҐЈ¤  㤮Ў­® ¤«п ®ЇҐа вЁў­®Ј®
Ёе Ё§¬Ґ­Ґ­Ёп, ўў®¤  Ё ­Ґ§ ўЁбЁ¬®Ј® еа ­Ґ­Ёп. Ћ¤­ Є® "§ иЁвлҐ" ў
Їа®Ја ¬¬Ґ Їа ўЁ«  ®ЎҐбЇҐзЁў ов Є®¬Ї Єв­®бвм ќ‘ Ё Ўлбва®вг а Ў®вл.
ќ‘ б ­Ґ§ ўЁбЁ¬л¬ еа ­Ґ­ЁҐ¬ Їа ўЁ« Ё д Єв®ў ў Ѓ„ Є« ббЁдЁЄ жЁ®­­®Ј®
вЁЇ  ЇаҐ¤бв ў«Ґ­­  ў б«Ґ¤го饩 Їа®Ја ¬¬Ґ, ў Є®в®а®© Ўг¤гв ॠ«Ё§®ў ­л
Ї®б«Ґ¤®ў вҐ«м­® в ЄЁҐ е а ЄвҐа­лҐ ¤«п ќ‘ дг­ЄжЁЁ, Є Є ўў®¤,
б®еа ­Ґ­ЁҐ Ё । ЄвЁ®ў ­ЁҐ Ў §л §­ ­Ё©, ¬Ґе ­Ё§¬ ўлў®¤  Ё
Є®¬¬Ґ­вЁа®ў ­ЁҐ ўлў®¤  (®Ўмпб­Ґ­ЁҐ). ‡¤Ґбм ®ЎмҐЄвл Є« ббЁдЁжЁа®ў ­л
Ї® Є вҐЈ®аЁп¬, Є®в®алҐ § вҐ¬ а §¤Ґ«Ґ­л ­  Ў®«ҐҐ ¬Ґ«ЄЁҐ Є вҐЈ®аЁЁ.
ЏаЁзҐ¬ Є ¦¤ п Ї®¤Є вҐЈ®аЁп е а ЄвҐаЁ§гҐвбп ­ Ў®а®¬ ЇаЁ§­ Є®ў
(гб«®ўЁ©), Є®в®алҐ ¬®Јгв Ё¬Ґвм ЇаҐдҐЄб not,   в Є¦Ґ ®ЎмҐ¤Ё­пвмбп
®ЇҐа в®а®¬ ¤Ё§ко­ЄжЁЁ or.

DOMAINS
CONDITIONS = BNO* /* бЇЁб®Є ­®¬Ґа®ў гб«®ўЁ©*/
HISTORY = RNO* /* бЇЁб®Є ­®¬Ґа®ў Їа ўЁ«-Є вҐЈ®аЁ©*/
RNO, BNO, FNO = INTEGER
CATEGORY = STRING /* Є вҐЈ®аЁп - бва®Є®ў п ЇҐаҐ¬Ґ­­ п */
data_file = string /* Ё¬п д ©«  Ў §л §­ў­Ё© */
file = save_file;df /* вЁЇ ЇҐаҐ¬Ґ­­®© Ё¬п д ©« */
slist = string* /* бЇЁб®Є бва®Є */

DATABASE /* Ў §  §­ ­Ё© */
rule(RNO,CATEGORY,CATEGORY,CONDITIONS) /* Їа ўЁ«  б ­®¬Ґа®¬ RNO,
Ё¬Ґ­Ґ¬ Є вҐЈ®аЁЁ, Ё¬Ґ­Ґ¬ Ї®¤Є вҐЈ®аЁЁ, бЇЁбЄ®¬ ­®¬Ґа®ў гб«®ўЁ© */
cond(BNO,STRING) /* гб«®ўЁп б ­®¬Ґа®¬ BNO Ё ⥪б⮬ */
data_file(data_file) /* Ё¬Ґ­  д ©«®ў Ѓ‡ ­  ¤ЁбЄҐ */
yes(BNO) /* ­®¬Ґа  гб«®ўЁ© б ®вўҐв®¬ "¤ " */
no(BNO) /* б ®вўҐв®¬ "­Ґв" */
fact(FNO,CATEGORY,CATEGORY) /* д Євл б ­®¬Ґа®¬ FNO Ё Є вҐЈ®аЁ-
п¬Ё */
topic(string) /* ­ з «м­лҐ Є вҐЈ®аЁЁ - § Ј®«®ўЄЁ */

include "tdoms.pro" /* ўбЇ®¬®Ј вҐ«м­Ґ ¬®¤г«Ё ¤«п */
include "tpreds.pro" /* ¤«п ॠ«Ё§ жЁЁ ¬Ґ­о Ё ®Є®­*/
include "menu2.pro"

PREDICATES
title_go update edit_kb
list llist(HISTORY) load_know save_know
pick_dba(data_file) erase clear
proces(integer) endd(integer) listopt
evalans(char) info(CATEGORY) goes(CATEGORY)
run reverse(CONDITIONS,CONDITIONS)
reverse1(CONDITIONS,CONDITIONS,CONDITIONS)

/* ЇаҐ¤ЁЄ вл ¤«п ¬Ґе ­Ё§¬  ўлў®¤  */
go(HISTORY,CATEGORY)
check(RNO,HISTORY,CONDITIONS)
notest(BNO)
inpq(HISTORY,RNO,BNO,STRING)
do_answer(HISTORY,RNO,STRING,BNO,INTEGER)

/* ЇаҐ¤ЁЄ вл ¤«п ®Ўмпб­Ґ­Ёп ўлў®¤  */
sub_cat(CATEGORY,CATEGORY,CATEGORY)
show_conditions(CONDITIONS,string)
show_rule(RNO,string)
show_cond(BNO,string)
report(HISTORY,string)
quest(CATEGORY,integer,integer,CATEGORY)

/* ЇаҐ¤ЁЄ вл ¤«п ¤®Ў ў«Ґ­Ёп Є Ў §Ґ §­ ­Ё© */
topict(string)
getrnr(RNO,RNO)
getbnr(BNO,BNO)
readcondl( CONDITIONS )
help
getcond(BNO,STRING)
save_y(char,string,data_file)
wrf(string) e(char,char)

GOAL /* ѓ« ў­ п 楫м */
makewindow(1,49,71,"„€Ђ‹Ћѓ ‘ ќЉ‘Џ…ђ’ЌЋ‰ ‘€‘’…ЊЋ‰",4,0,20,80),
makewindow(2,14,71,"ЇаЁ¬Ґ­Ґ­­лҐ Їа ўЁ«  ўлў®¤ ",4,0,20,80),
makewindow(5,7,0,"",0,0,24,80),
makewindow(8,23,0,"",24,0,1,80), /* бва®Є  ЎҐ§ а ¬ЄЁ */
makewindow(9,14,4,"‘‚…„…Ќ€џ ‘—€’›‚Ђћ’‘џ ‘ „€‘ЉЂ",0,0,25,80),
run.
clauses
run :-
repeat, /* ®аЈ ­Ё§ жЁп Ї®ўв®а  */
shiftwindow(8),
clearwindow,
write(" ўлЎЁа ©вҐ ¤Ґ©бвўЁҐ б Ї®¬®ймо бв५®Є "),
shiftwindow(1),
menu(6,55,7,7,
["Љ®­бг«мв жЁп",
"‚ў®¤ Ў §л §­ ­Ё©",
"‘®еа ­Ґ­ЁҐ Ѓ‡",
"Џа®б¬®ва Ѓ‡",
"„®Ў ў«Ґ­ЁҐ Є Ѓ‡",
"“¤ «Ґ­ЁҐ Ѓ‡",
"ђҐ¤ ЄжЁп Ѓ‡",
"Џ®¬®йм",
"®Ўа йҐ­ЁҐ Є DOS",
"‚л室 Ё§ Їа®Ја ¬¬л"],"¬Ґ­о",2,
CHOICE),
proces(CHOICE),
endd(CHOICE),!.

/*‚лЎ®а ¤Ґ©бвўЁп Ї® ўўҐ¤Ґ­­®¬г Choice*/

proces(0):-exit.
proces(1):-title_go.
proces(2):-load_know.
proces(3):-save_know.
proces(4):-list.
proces(5):-update.
proces(6):-erase.
proces(7):-edit_kb.
proces(8):-help.
proces(9):-write("Borland ",'\3','\2'," you"),system("").
proces(10).

endd(0).
endd(10):- clearwindow,
write("Џ®¤вўҐа¤ЁвҐ ўл室! (y,¤) "),
readchar(Ans),e(Ans,C),
C='y',exit.

/* ¬Ґе ­Ё§¬ ўлў®¤  */

title_go:-
goes(Mygoal), /* ўў®¤ § Ј®«®ўЄ  ­ з «м­®© Є вҐЈ®аЁЁ */
nl,nl,go([],Mygoal),!. /* § Їа®б гб«®ўЁ© Ё
®ЇаҐ¤Ґ«Ґ­ЁҐ Ї®¤Є вҐЈ®аЁ© */
title_go:- nl,
write("€§ўЁ­ЁвҐ, ­® ўўҐ¤Ґ­­®© Є вҐЈ®аЁЁ ­Ґв ў Ѓ‡ "),nl,update.

goes(Mygoal):-
clear,clearwindow,
topict(Topic),
repeat,
write(" ‡ Ј®«®ў®Є Ў §л §­ ­Ё© (Ѓ‡),Є®в®ал© ‚л ¬®¦ҐвҐ ўўҐбвЁ: ",Topic,
"\nЁ«Ё '?' ¤«п Їа®б¬®ва  ўбҐе Ё¬ҐойЁебп ў Ѓ‡ § Ј®«®ўЄ®ў.\n ‚ў®¤ЁвҐ: "),
readln(Mygoal),
info(Mygoal),!.

topict(Topic) :- topic(Topic).
topict(Topic) :- write("‚ў®¤ ­®ў®Ј® § Ј®«®ўЄ  Ѓ‡ : "),
readln(Topic),assert(topic(Topic)).

go( _, Mygoal ):- /* Џа®ўҐаЄ  ­ «ЁзЁп ўўҐ¤Ґ­­®Ј® § Ј®«®ўЄ  */
not(rule(_,Mygoal,_,_)),!,nl, /* ў Ў §Ґ §­ ­Ё© */
makewindow(11,37,-2,"‚›‚Ћ„ ќЉ‘Џ…ђ’ЌЋ‰ ‘€‘’…Њ›",7,0,10,80),
shiftwindow(11),clearwindow,
write(" ",Mygoal),nl,nl,
write("‚ б гбва Ёў Ґв ? (y,¤)"),
readchar(Ans),e(Ans,C),
evalans(C).

go( HISTORY, Mygoal ):-
rule(RNO,Mygoal,NY,COND), /* ўлЎ®а Ё§ Ѓ‡ RNO, Ї®¤Є вҐЈ®аЁЁ NY Ё
бЇЁбЄ  гб«®ўЁ© COND, Ї®¤вўҐа¦¤ ойЁе NY */
check(RNO,HISTORY, COND), /* Їа®ўҐаЄ  гб«®ўЁ© Ё§ COND */
wrf(NY),
go([RNO|HISTORY],NY). /* ४габЁп ¤«п б¤го饣® га®ў­п Є вҐЈ®аЁ©*/

check( RNO, HISTORY, [BNO|REST] ):- yes(BNO), !,
check(RNO, HISTORY, REST)./*Ўл« «Ё а ­ҐҐ ®вўҐв ¤  ­  гб«®ўЁҐ BNO*/
check( _, _, [BNO|_] ):- no(BNO), !,fail. /* ⮦Ґ ¤«п ®вўҐв  ­Ґв*/
check( RNO, HISTORY, [BNO|REST] ):- cond(BNO,NCOND),
fronttoken(NCOND,"­Ґ",_COND), /* Ґбвм ЇаҐдҐЄб "­Ґ" ?*/
frontchar(_COND,_,COND), /* г¤ «Ё¬ бЁ¬ў®« Ї®б«Ґ not*/
cond(BNO1,COND), /* ­®¬Ґа гб«®ўЁп BNO1 ЎҐ§ ЇаҐдҐЄб */
notest(BNO1), !, /* Ўл« ®вўҐв ­Ґв?*/
check(RNO, HISTORY, REST). /* Є б«Ґ¤го饬г гб«®ўЁо */
check(_,_, [BNO|_] ):- cond(BNO,NCOND),
fronttoken(NCOND,"­Ґ",_COND),
frontchar(_COND,_,COND),
cond(BNO1,COND), /* ўбҐ ⮦Ґ ¤«п ®вўҐв®ў ¤  */
yes(BNO1), !,fail. /* ЇаЁ '¤ ' б 'not' check ­Ґ ўлЇ®«­пҐвбп */
check( RNO, HISTORY, [BNO|REST] ):-
cond(BNO,TEXT),
inpq(HISTORY,RNO,BNO,TEXT), /* § Їа®б ®вўҐв  ­  TEXT */
check(RNO, HISTORY, REST). /* ЇаЁ ®вўҐвҐ ¤  ЇҐаҐе®¤ Є
б«Ґ¤го饬г гб«®ўЁо, Ё­ зҐ check ­Ґ ўлЇ®«­пҐвбп */
check( _, _, [] ). /* бЇЁб®Є гб«®ўЁ© ЁбзҐаЇ ­ ЇаЁ ўбҐе ®вўҐв е ¤  */

notest(BNO):-no(BNO),!.
notest(BNO):-not(yes(BNO)),!.

inpq(HISTORY,RNO,BNO,TEXT):-
write(" - ",TEXT,": "), ROW = 0, COL = 0,
menu(ROW,COL,7,7,["¤ ","­Ґв","?"],"",1,CHOICE),
do_answer(HISTORY,RNO,TEXT,BNO,CHOICE).

do_answer(_,_,_,_,0):-exit.
do_answer(_,_,_,BNO,1):-assert(yes(BNO)),
shiftwindow(1),write("¤ "),nl.
do_answer(_,_,_,BNO,2):-assert(no(BNO)),
shiftwindow(1),write("­Ґв"),nl,fail.
do_answer(HISTORY,RNO,TEXT,BNO,3):- !,
shiftwindow(2),
rule( RNO, Mygoal1, Mygoal2, _ ),
sub_cat(Mygoal1,Mygoal2,Lstr),
concat(" ",Lstr,Lstr1),
concat(Lstr1," б«Ґ¤гп Їа ўЁ«г ",Ls1),
str_int(Str_num,RNO),
concat(Ls1,Str_num,Ans),
show_rule(RNO,Lls1),
concat(Ans,Lls1,Ans1),
report(HISTORY,Sng),
concat(Ans1,Sng,Answ),
display(Answ),
shiftwindow(8), clearwindow,
write(" €бЇ®«м§гп бв५ЄЁ ўлЎҐаЁвҐ Їг­Єв "),
shiftwindow(1),
ROW = 0,COL = 0,
menu(ROW,COL,7,7,["¤ ","­Ґв","?"],"",1,CHOICE),
do_answer(HISTORY,RNO,TEXT,BNO,CHOICE).
/* do_answer(HISTORY,RNO,_,_,4) :-
rule(RNO,M1,_,B),!,ret(B),
rule(_,M2,M1,_),!,
go(HISTORY,M2).
ret([]).
ret([B1|H]):-rt(B1),ret(H).
rt(B1):-retract(yes(B1)).
rt(B1):-retract(no(B1)).
rt(_). */

/* Џа®б¬®ва Їа ўЁ« / ¬Ґе ­Ё§¬ ®Ўмпб­Ґ­Ёп */

list :- findall(RNO,rule(RNO,_,_,_),LIST),
llist(List),!/*,display(Str),!*/.

llist([]) :-!.
llist([RNO|List]):-
/* llist(List), */
show_rule(RNO,RNO_Str),write(RNO_Str),readchar(_),llist(List).
/* concat(RNO_Str,Oldstr,Str). */

show_rule(RNO,Strg):-
rule( RNO, Mygoal1, Mygoal2, CONDINGELSER),
str_int(RNO_str,RNO),
concat("\n Џа ўЁ«® ",RNO_str,Ans),
concat(Ans,": ",Ans1),
sub_cat(Mygoal1,Mygoal2,Lstr),
concat(Ans1,Lstr,Ans2),
concat(Ans2," Ґб«Ё:\n ",Ans3),
reverse(CONDINGELSER,CONILS),
show_conditions(CONILS,Con),
concat(Ans3,Con,Strg).

show_conditions([],"").
show_conditions([COND],Ans):-
show_cond(COND,Ans),!.
show_conditions([COND|REST],Ans):-
show_cond(COND,Text),
concat("\nЁ ",Text,Nstr),
show_conditions(REST,Next_ans),
concat(Next_ans,Nstr,Ans).

show_cond(COND,TEXT):-cond(COND,TEXT).

sub_cat(Mygoal1,Mygoal2,Lstr):-
concat(Mygoal1," ўЄ«оз Ґв ",Str),
concat(Str,Mygoal2,Lstr).

report([],"").
report([RNO|REST],Strg) :-
rule( RNO, Mygoal1, Mygoal2, _),
sub_cat(Mygoal1,Mygoal2,Lstr),
concat("\n\n ",Lstr,L1),
concat(L1," б«Ґ¤гп Їа ўЁ«г ",L2),
str_int(Str_RNO,RNO),
concat(L2,Str_RNO,L3),
concat(L3,".",L4),
show_rule(RNO,Str),
concat(L4,Str,L5),
report(REST,Next_strg),
concat(L5,Next_strg,Strg).

/*„®Ў ў«Ґ­ЁҐ Є Ў §Ґ §­ ­Ё©*/

getrnr(N,N):-not(rule(N,_,_,_)),!.
getrnr(N,N1):-H=N+1,getrnr(H,N1).

getbnr(N,N):-not(cond(N,_)),!.
getbnr(N,N1):-H=N+1,getbnr(H,N1).

readcondl( [BNO|R] ):-
write("гб«®ўЁҐ: "),readln(COND),
COND><"",!,
getcond(BNO,COND),
readcondl( R ).
readcondl( [] ).

getcond(BNO,COND):-cond(BNO,COND),!.
getcond(BNO,COND):-getbnr(1,BNO), assert( cond(BNO,COND) ).

/*ђҐ¤ ЄжЁп Ѓ‡*/

edit_kb :-
pick_dba(Filename),
file_str(Filename,Data),
edit(Data,NewData),clearwindow,
write("‡ ЇЁб вм ? (y,¤): "),
readchar(Ans),e(Ans,C),save_y(C,NewData,Filename).
e('y',C):-C='y'. e('¤',C):-C='y'. e('Y',C):-C='y'. e('„',C):-C='y'.
e(_,C):-C='n'.
save_y('y',D,Filename):-
openwrite(save_file,Filename),
writedevice(save_file),
write(D),
closefile(save_file).
save_y('n',_,_).

/*HELP !!!*/

help :- file_str("geni.hlp",Help),
display(Help).


/*Љ®¬ ­¤л Ї®«м§®ў вҐ«п*/

load_know:-pick_dba(Data), consult(Data),clearwindow,nl,
write(" Ѓ §  §­ ­Ё©: ",Data," § Ја㦥­ !").

save_know :- data_file(Data), bound(Data),!,
save(Data),clearwindow,
writef(" ‚ и  Ў §  §­ ­Ё© % § ЇЁб ­ !",Data).
save_know :- makewindow(11,10,9,"€¬п д ©« ",10,40,4,35),
write("‚ўҐ¤ЁвҐ Ё¬п Ў §л §­ ­Ё©: "),
readln(Data),
assert(data_file(Data)),
removewindow,
save(Data),clearwindow,
writef(" ‚ и  Ў §  §­ ­Ё© % б®еа ­Ґ­ !",Data).

pick_dba(Data) :- makewindow(10,7,7,"“Є ¦ЁвҐ Ё¬п д ©« ",10,10,10,60),
dir("","*.gni",Data),removewindow.

erase:-retract(_),fail.
erase.

clear:-retract(yes(_)),retract(no(_)),fail,!.
clear.

update:-
shiftwindow(5),
clearwindow,
write("\n\t„®Ў ў«Ґ­ЁҐ ў Ѓ‡\n\t****************\n"),
cursor(1,30),
write("€¬п Є вҐЈ®аЁЁ: "),
cursor(3,30),
write("€¬п Ї®¤Є вҐЈ®аЁЁ: "),
cursor(1,50),

‡¤Ґбм ўбҐ ®ЎмҐЄвл б ЇаЁ§­ Є ¬Ё Є« ббЁдЁжЁаговбп Ї® а §¤Ґ« ¬ Ё«Ё
Є вҐЈ®аЁп¬, Є®в®алҐ ¬®Јгв б®бв ў«пвм ЁҐа аеЁо Ё«Ё ў«®¦Ґ­­®бвм ®в
б ¬®Ј® ®ЎйҐЈ® Ї®­пвЁп Є Ў®«м讬г зЁб«г з бв­ле Ї®­пвЁ© Ё«Ё ®ЎмҐЄв®ў.
ЏаЁ­ ¤«Ґ¦­®бвм ®ЎмҐЄв  Є Ї®¤Є вҐЈ®аЁЁ § ¤ Ґвбп а冷¬ гб«®ўЁ©,
ўлЇ®«­Ё¬®бвм Є®в®але ®ЇаҐ¤Ґ«пҐвбп ў Їа®жҐбᥠ¤Ё «®Ј  б Ї®«м§®ў вҐ«Ґ¬.
„ ­­ п Їа®Ја ¬¬  пў«пҐвбп ®Ў®«®зЄ®© ќ‘, в Є Є Є ¬®¦Ґв а Ў®в вм б
а §«Ёз­л¬Ё Ў § ¬Ё §­ ­Ё©, Є®в®алҐ ЇаҐ¤бв ў«пов б®Ў®© Ў §г ¤ ­­ле, ­®
­Ґ в®«мЄ® д Єв®ў (дЁЄбЁа®ў ­­ле ¤ ­­ле), ­® Ё Їа ўЁ« ўлў®¤ ,
ЁбЇ®«м§гҐ¬ле ў нЄбЇҐав­®© бЁб⥬Ґ ў н⮬ Ёе Є зҐб⢥.
ќд䥪⠨ᯮ«м§®ў ­Ёп вҐе­®«®ЈЁЁ ®Ў®«®зҐЄ нЄбЇҐав­ле бЁб⥬
б®бв®Ёв ў §­ зЁвҐ«м­®¬ б®Єа йҐ­ЁЁ гбЁ«Ё©, ўаҐ¬Ґ­Ё, б।бвў,
ᮧ¤ вҐ«Ґ© ­®ўле ќ‘,   в Є¦Ґ Ї®«м§®ў вҐ«Ґ©.
ЏаЁ¬Ґа ­Ґ§ ўЁбЁ¬®© Ў §л §­ ­Ё© ­  ЇаЁ¬ҐаҐ ЇаЁўҐ¤Ґ­ ­Ё¦Ґ.

code 3500
nowarnings
domains
file = descriptor s = string
infrec = imp(s, s, s, s, s, s, s, real)
realist = real*
database
adjustflag
convstack(s) /* ЁбЇ®«м§гҐвбп ў ¬®¤г«Ґ */
danswer(s,real)
dbimp(s, s, s, s, s, s, s, real)
define(symbol, s) /* €бЇ®«м§гҐвбп ў ¬®¤г«Ґ reinevl1. */
evidence(s, real)
hypothesis_node(s)
imp(s, s, s, s, s, s, s, real)
infer_summary(infrec, real)
stackvalue(real) /* €бЇ®«м§гҐвбп ў ¬®¤г«Ґ relnevl1 */
tdbimp(s,s,s,s,s,s,s,real)
terminal_node(s)
varvalue(symbol, real)
predicates
absvalue(real,real)
adjuststack
allinfer(s,real)
and_go_on
answer(s,real)
append(reallist, reallst,reallist)
cleanerx
cleanery
cleanerz
cleanit1
cleanit2
cleanit3
cleanit4
cleanit5
cleanit6
cleanit7
cleanit8
cleanit9
cleanit10
cleanit11
cleanit12
cleanit13
cleanit14
clearall
combine(reallist,real)
cond_multiplier(s,real)
defs_go_on
display_one_answer
edit_rs
exsys_driver
find_multiplaier(s,real,s,real)
form_go_on
form_describer(s,real)
get_name(s)
getallans
getmode1(s,s)
getmode2(s,s)
gettype1(s,s)
gettype2(s,s)
getsense(s,s)
how_explain(s)
how_describer(s)
infer(s,real)
more_defs
make_rules
make_imps
make_defs
make_terms
make_hypos
make_simples
make_ands
make_ors
make_forms
max(real,real,real)
min(real,real,real)
or_go_on
pauser
prepare_answer
purjeit
putadjustflag
process(integer)
pick_exsys(s)
qualifier(s,real,real)
reloadit
reply_to_input(s,s,real)
repeat
record_it(char,s,s)
seerules
seeimps
seedefs
seehypos
seeterms
showresults
shell_driver
simple_go_on
supercombine(reallist, real)
why_describer(s,s,s,s,s,s,s,real)

include "menu.pro"
include "relnevl1"

clauses
shell_driver:-
makewindow(1,112,7,
"IMP - ®Ў®«®зЄ  ¤«п Ї®бв஥­Ёп ќ‘",0,0,25,80),
repeat, shiftwindow(1), clearwindow,
menu(6,15,
"‘Їа ў®з­ п Ё­д®а¬ жЁп" ,
"‚ў®¤ Їа ўЁ« ­®ў®© ќ‘",
"Џа®ўҐаЄ  § Ја㦥­­®Ј® ¬­®¦Ґбвў  Їа ўЁ«",
"‘®еа ­Ґ­ЁҐ § Ја㦥­­®Ј® ¬­®¦Ґбвў  Їа ўЁ«",
"‡ Јаг§Є  ®¤­®Ј® Ё§ ­ Ў®а®ў Їа ўЁ«",
"Џа®Ј®­ § Ја㦥­­®© нЄбЇҐав­®© бЁб⥬л",
"ђҐ¤ ЄвЁа®ў ­ЁҐ ®¤­®Ј® Ё§ ­ Ў®а®ў Їа ўЁ«",
"ЏҐз вм ®¤­®Ј® Ё§ ­ Ў®а®ў Їа ўЁ«",
"‚л室 ў DOS",
"ЋЄ®­з ­ЁҐ а Ў®вл б ЇаЈа ¬¬®©", Choice),
process(Choice), Choice=10, !.
process(1):- file_str("impshell.hlp",ZZ),display(ZZ),!.
process(2):- clearall, mak_rules, !.
process(3):- seerules, !.
process(4):- get_name(Rulefile), save(Rulefile), !.
process(5):- clearall, pick_exsys(Rulefile), consult(Rulefile), !.
process(6):- cleanerx, cleanerx, exsys_driver, !.
process(7):- clearall, edit_rs, !.
process(8):- pick_exsys(Rulefile), concat("copy",Rulefile,Z),
concat(Z,"prn:", ZZ), system(ZZ), !.
process(9):- system(""), !.
process(10):- !.

make_rules:- clearwindow, make_imp, make_defs,
make_terms, make_hypos,
clearwindow, nl,nl,
write("„«п в®Ј®, зв®Ўл ᤥ« вм Їа ўЁ«  Ї®бв®п­­л¬Ё,"),nl,
write(" б®еа ­ЁвҐ Ёе ў д ©«Ґ (б¬. Ј«. ¬Ґ­о)"),nl,nl,
write(" Џа ўЁ«  ¬®Јгв Ўлвм Ё§¬Ґ­Ґ­л Ї®б«Ґ б®еа ­Ґ­Ёп, "),
nl,write(" ЁбЇ®«м§гп дг­ЄжЁо । ЄвЁа®ў ­Ёп (б¬.Ј«.¬Ґ­о)."),
nl, pauser.
make_terms:- clearwindow, nl,
write("‡ ¤ ­ЁҐ Є®­жҐўле 㧫®ў ¤«п нв®Ј® ­ Ў®а  Їа ўЁ«"),
repeat, nl,nl,
write("‚ўҐ¤ЁвҐ ⥪бв ¤«п ®ЇаҐ¤Ґ«Ґ­Ёп Є®­жҐў®Ј® 㧫 :"),
nl,readln(X), assert(terminal_node(X)), more_defs, !.
make_hypos:- clearwindow, nl,
write("‡Ђ„ЂЌ€… ѓ€ЏЋ’…’€—…‘Љ€• “‡‹Ћ‚ „‹џ ЌЂЃЋђЂ ЏђЂ‚€‹"),
repeat, nl,nl,
write("‚ўҐ¤ЁвҐ бва®Єг¤«п ®ЇаҐ¤Ґ«Ґ­Ёп ЈЁЇ®вҐвЁзҐбЄ®Ј® 㧫 :"),
nl, readln(X),assert(hypothesis_node(X)), more_defs, !.
make_imps:- make_simples, make_ands, make_ors, make_forms.
make_simples:- clearwimdow, simple_go_on,
repeat, clearwindow, nl,
write("‡Ђ„ЂЌ€… ЏђЋ‘’ЋѓЋ ЏђЂ‚€‹Ђ €ЊЏ‹€ЉЂ–€€"),nl,nl,
write("—в® ¬®¦Ґв Ўлвм ўлўҐ¤Ґ­® Ё§ нв®© Ё¬Ї«ЁЄ жЁЁ?"),nl,
write(""), readln(Z), nl,
write("—в® г⢥ত Ґвбп ў Ї®бл«ЄҐ (Ї®«®¦ЁвҐ«м­ п д®а¬ )?"),
nl,write(""),readln(X),nl,
write("„®«¦­® «Ё гб«®ўЁҐ ®ваЁж вмбп NOT (ўўҐ¤ЁвҐ ¤/­)?"),
Соседние файлы в папке Доки к Прологу