home *** CD-ROM | disk | FTP | other *** search
- /*
- Copyright (c) 1988
- by Computer center of
- Shaan xi Mechinical colloge */
- code = 3000
- /*
- This is a Diagnostic Directing expert-system
- for IBM PC XT computer. */
-
- DOMAINS
- CONDITIONS = BNO*
- HISTORY = RNO*
- RNO, BNO, FNO = INTEGER
- My, PART = STRING
- data_file = string
- file = save_file
- slist = string*
-
- DATABASE
- rule(RNO,PART,PART,CONDITIONS)
- cond(BNO,STRING)
- data_file(data_file)
- yes(BNO)
- no(BNO)
- fact(FNO,PART,PART)
- result(PART,PART)
- include "tdoms.pro"
- include "tpreds.pro"
- include "menu2.pro"
-
- PREDICATES
-
- /*Commands*/
- diag
- update
- list
- llist(HISTORY,string)
- load_know
- save_know
- pick_dba(data_file)
- erase
- clear
- proces(integer)
- proce2(integer)
- endd(integer)
- evalans(char)
- read(PART)
- run
- reverse(CONDITIONS,CONDITIONS)
- reverse1(CONDITIONS,CONDITIONS,CONDITIONS)
-
- /*Inferences mechanisms*/
- go(HISTORY,PART)
- check(RNO,HISTORY,CONDITIONS)
- notest(BNO)
- inpq(HISTORY,RNO,BNO,STRING)
- do_answer(HISTORY,RNO,STRING,BNO,INTEGER)
-
- /*Explanations*/
- sub_cat(PART,PART,PART)
- show_conditions(CONDITIONS,string)
- show_rule(RNO,string)
- show_cond(BNO,string)
- report(HISTORY,string)
- quest(PART,integer,integer,PART)
-
- /*Update the knowledge*/
- getrnr(RNO,RNO)
- getbnr(BNO,BNO)
- readcondl( CONDITIONS )
- help
- getcond(BNO,STRING)
- /*menu */
- bootmenu
- beepmenu
- runmenu
- hdiskmenu
- sdiskmenu
- showmenu
- keydmenu
- prnmenu
- proboot(integer)
- probeep(integer)
- prorun(integer)
- prohdisk(integer)
- prosdisk(integer)
- proshow(integer)
- prokeyd(integer)
- proprn(integer)
-
- GOAL
- makewindow(1,49,72,"",4,0,20,80),
- makewindow(2,3,7,"",14,0,10,80),
- makewindow(5,7,0,"",0,0,4,80),
- makewindow(8,13,0,"",24,0,1,80),
- makewindow(9,7,0,"",0,0,25,80),
- run.
-
- clauses
- run :-
- repeat,
- shiftwindow(8),
- clearwindow,
- write(" select option with arrow key "),
- shiftwindow(1),
- menu(6,55,10,7,
- ["Diagnostic",
- "Load knowledge",
- "Save knowledge",
- "List knowledge",
- "Update knowledge",
- "Erase knowledge",
- "Edit Knowledge",
- "Help Information",
- "DOS Shell",
- "Exit System"],"menu",2,
- CHOICE),
- proces(CHOICE),
- endd(CHOICE),!.
-
- /*Process Choice*/
-
- proces(0):-exit.
- proces(1):-diag.
- proces(2):-load_know.
- proces(3):-save_know.
- proces(4):-list.
- proces(5):-update.
- proces(6):-erase.
- proces(7):-system("edkb").
- proces(8):-help.
- proces(9):-system("").
- proces(10).
-
- endd(0).
- endd(10):- clearwindow,
- write("Are you sure? (y or n) "),
- readchar(C),write(C),
- C='y',exit.
-
- /*Inference mechanism*/
-
- diag:-
- read(_).
- diag:- nl,
- write("Sorry that one I did not know"),nl,text,update.
-
- read(_):-
- clear,graphics(2,1,10),nl,
- repeat,
- write(" ╒∩╢╧╬╩╠Γ╗∙▒╛▓╦╡Ñ:"),nl,nl,
- write("1) ╞⌠╢»╬╩╠Γ 2) ╘╦╨╨╬╩╠Γ"),nl,
- write("3) ╙▓┼╠╬╩╠Γ 4) ╚φ┼╠╬╩╠Γ"),nl,
- write("5) ╧╘╩╛╬╩╠Γ 6) ╝ⁿ┼╠╬╩╠Γ"),nl,
- write("7) ┤≥╙í╗·╬╩╠Γ 8) ═╦│÷"),nl,nl,
- write("╟δ╩Σ╚δ─π╡─╤í╘± (1--8) "),
- readint(Dm),
- Dm<9,proce2(Dm),Dm>=8,!.
-
- proce2(1):-bootmenu,!.
- proce2(2):-runmenu,!.
- proce2(3):-hdiskmenu,!.
- proce2(4):-sdiskmenu,!.
- proce2(5):-showmenu,!.
- proce2(6):-keydmenu,!.
- proce2(7):-prnmenu,!.
- proce2(8):-text,run,!.
-
- bootmenu:-
- graphics(2,1,3),nl,nl,
- write(" ╞⌠╢»╬╩╠Γ└α╨═:"),nl,
- write("1)╞⌠╢»╩▒│÷╧╓╧╡═│┤φ( POST ╩º░▄)"),nl,
- write("2)╡τ╘┤╡╞▓╗┴┴,╞┴─╗▓╗╧╘╩╛ ,┼╠▓╗╣ñ╫≈"),nl,
- write("3)╡τ╘┤╡╞┴┴,╞┴─╗╞┴─╗╬▐╚╬║╬╧╘╩╛,┼╠▓╗╣ñ╫≈"),nl,
- write("4) POST ╒²│ú,╡½▓╗─▄╞⌠╢»"),nl,nl,
- write(" ╟δ╩Σ╚δ─π╡─╤í╘± (1-4):"),nl,
- write(" ╗≥╩Σ╚δ 5 ═╦│÷╞⌠╢»╬╩╠Γ╒∩╢╧ "),nl,nl,
- readint(Replyboot),nl,
- proboot(Replyboot),Replyboot>=5,!.
- proboot(1):-beepmenu.
- proboot(2):-go([],power_computer),!.
- proboot(3):-go([],clock),!.
- proboot(4):-go([],boot_4),!.
- proboot(5):-text,read(_),!.
- /*.........*/
- beepmenu:-
- clearwindow,
- graphics(2,0,14),
- write(" │⌡╩╝╒∩╢╧╩▒╡─╜╨╔∙└α╨═:"),nl,
- write("1) ╬▐╜╨╔∙,╗·╞≈╬▐╖┤╙ª"),nl,
- write("2) ╥╗╔∙╢╠╜╨,┤┼┼╠╡╞┴┴"),nl,
- write("3) ┴¼╨°╜╨ "),nl,
- write("4)╥╗╔∙│ñ╜╨,╥╗╔∙╢╠╜╨"),nl,
- write("5)╥╗╔∙│ñ╜╨,┴╜╔∙╢╠╜╨"),nl,
- write("6)╥╗╔∙╢╠╜╨,╞┴─╗▒Σ║┌╗≥╧╘╩╛▓╗╒²│ú"),nl,
- write("7) ╓╪╕┤╡─╢╠╜╨╔∙"),nl,
- write("8)╥╗╔∙╢╠╜╨,╝┤│÷╧╓ BASIC ╠ß╩╛╖√"),nl,nl,
- write(" ╟δ╩Σ╚δ─π╡─╤í╘± (1-8):"),nl,
- write(" ╗≥╩Σ╚δ 9 ═╦│÷╜╨╔∙╒∩╢╧ "),nl,nl,
- readint(Replybeep),
- probeep(Replybeep),Replybeep=9,!.
- probeep(1):-go([],power_computer),!.
- probeep(2):-go([],disk),!.
- probeep(3):-go([],power_computer),!.
- probeep(4):-go([],system_board),!.
- probeep(5):-go([],crt_circut),!.
- probeep(6):-go([],crt_circut),!.
- probeep(7):-go([],system_board),!.
- probeep(8):-go([],disk),!.
- probeep(9):-!.
- /* run menu */
- runmenu:-
- graphics(2,1,3),
- write(" ╘╦╨╨╬╩╠Γ└α╨═:"),nl,nl,
- write("1) ╝╞╦π╗·╦└╦°,╡½╡τ╘┤╚╘╘┌╣ñ╫≈"),nl,
- write("2) ╝╞╦π╗·╡⌠╡τ,╫╘╝║╣╪╢╧╡τ╘┤"),nl,
- write("3) ╞µ┼╝╨ú╤Θ┤φ "),nl,
- write("4) ╜╙╔╧═Γ▓┐╔Φ▒╕╩▒╝╞╦π╗·╧╡═│▒└└ú"),nl,
- write("5) ╣²╚╚"),nl,
- write("6) ═╦│÷"),nl,nl,
- write(" ╟δ╩Σ╚δ─π╡─╤í╘±(0-6)"),
- readint(Replyrun),
- prorun(Replyrun),
- Replyrun>=6,!.
-
- /* run proces */
- prorun(1):-go([],run_1),!.
- prorun(2):-go([],run_2),!.
- prorun(3):-go([],run_3),!.
- prorun(4):-go([],run_4),!.
- prorun(5):-go([],run_5),!.
- prorun(6):-!.
- /* hard disk */
- hdiskmenu:-
- graphics(2,0,19),
- write(" ╙▓┼╠╓ó╫┤└α╨═:"),nl,
- write("1) ╙▓┼╠▓╗╢»--╖├╬╩╩▒╫░╚δ╡╞▓╗┴┴"),nl,
- write("2) ╢┴╨┤▓╗═Ω╒√ "),nl,
- write("3) ╢┴╒²╚╖,╡½╨┤▓╗╒²╚╖ "),nl,
- write("4) ╘╦╨╨ CHKDSK ╩▒│÷┤φ "),nl,
- write("5) ╧∞╔∙╥∞│ú "),nl,
- write("6) ╢¬╡⌠┴╦╦∙┤µ╨┼╧ó "),nl,
- write("7) ═╦│÷"),nl,nl,
- write("╟δ╩Σ╚δ─π╡─╤í╘±(1-7)"),
- readint(Replyhdisk),
- prohdisk(Replyhdisk),
- Replyhdisk>=7,!.
- prohdisk(1):-go([],hdisk_1),!.
- prohdisk(2):-go([],hdisk_2),!.
- prohdisk(3):-go([],hdisk_3),!.
- prohdisk(4):-go([],hdisk_4),!.
- prohdisk(5):-go([],hdisk_5),!.
- prohdisk(6):-go([],hdisk_6),!.
- prohdisk(7):-!.
- /* soft disk */
- sdiskmenu:-
- graphics(2,1,15),
- write(" ╚φ┼╠╓ó╫┤└α╨═:"),nl,
- write("1) ╚φ┼╠▓╗╢»--╖├╬╩╩▒╫░╚δ╡╞▓╗┴┴"),nl,
- write("2) ╧╘╩╛ Not ready reading drive x ,Abort,Retry,Ignore?"),nl,
- write("3) ╢┴╨┤▓╗═Ω╒√ "),nl,
- write("4) ╢┴╒²╚╖,╡½╨┤▓╗╒²╚╖ "),nl,
- write("5) ╧∞╔∙╥∞│ú "),nl,
- write("6) ╫░╚δ,╨╢╧┬┼╠╞¼▒╚╜╧└º─╤ "),nl,
- write("7) ═╦│÷"),nl,nl,
- write("╟δ╩Σ╚δ─π╡─╤í╘±(1-7)"),
- readint(Replysdisk),
- prosdisk(Replysdisk),
- Replysdisk>=7,!.
- prosdisk(1):-go([],sdisk_1),!.
- prosdisk(2):-go([],sdisk_2),!.
- prosdisk(3):-go([],sdisk_3),!.
- prosdisk(4):-go([],sdisk_4),!.
- prosdisk(5):-go([],sdisk_5),!.
- prosdisk(6):-go([],sdisk_6),!.
- prosdisk(7):-!.
- /* display (show) */
- showmenu:-
- graphics(2,1,10),
- write("╧╘╩╛╬╩╠Γ└α╨═"),nl,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,nl,
- write(" ╟δ╩Σ╚δ─π╡─╤í╘±(1-9)"),
- readint(Replyshow),
- proshow(Replyshow),
- Replyshow>=9,!.
-
- proshow(1):-go([],no_display),!.
- proshow(2):-go([],show_fade),!.
- proshow(3):-go([],crt_overheating),!.
- proshow(4):-go([],v_nosyn),!.
- proshow(5):-go([],h_nosyn),!.
- proshow(6):-go([],show_gabage),!.
- proshow(7):-go([],no_color),!.
- proshow(8):-go([],char_show_bad),!.
- proshow(9):-!.
-
- /* keyboard (keyd) */
- keydmenu:-
- graphics(2,0,11),
- write("╝╠╨°╒∩╢╧╟░╙ª╚╖▒ú╝ⁿ┼╠╬▐╬∩└φ╦≡╔╦"),nl,
- write(" ╝ⁿ┼╠╬╩╠Γ└α╨═:"),nl,nl,
- write("1) ╝ⁿ┼╠╩º┴Θ"),nl,
- write("2) ╝ⁿ┼╠╦°╢¿╘┌╔╧╡╡╗≥╧┬╡╡"),nl,
- write("3) ╥╗╕÷╗≥╢α╕÷╝ⁿ▓╗╣ñ╫≈"),nl,
- write("4) ═╦│÷"),nl,nl,
- write(" ╟δ╩Σ╚δ─π╡─╤í╘±(1-4)"),
- readint(Replykeyd),
- prokeyd(Replykeyd),
- Replykeyd>=4,!.
- prokeyd(1):-go([],keyd_1),!.
- prokeyd(2):-go([],keyd_2),!.
- prokeyd(3):-go([],keyd_3),!.
- prokeyd(4):-!.
- /* printer (prn) */
- prnmenu:-
- graphics(2,0,2),
- write(" ┤≥╙í╗·╬╩╠Γ└α╨═:"),nl,nl,
- write("0) ═╦│÷"),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("10) ╙í│÷╡─╫╓╖√╝Σ╛α▓╗╛∙╘╚"),nl,
- write("11) ╢¬╡⌠▓┐╖╓┤≥╙í╫╓╖√"),nl,
- write("12) ┤≥╙í╓╜╙╡╝╖│╔╢╤"),nl,nl,
- write(" ╟δ╩Σ╚δ─π╡─╤í╘±(0-12)"),
- readint(Replyprn),
- proprn(Replyprn),
- Replyprn=0,!.
-
- proprn(0):-!.
- proprn(1):-go([],printer_1),!.
- proprn(2):-go([],printer_2),!.
- proprn(3):-go([],printer_3),!.
- proprn(4):-go([],printer_4),!.
- proprn(5):-go([],printer_5),!.
- proprn(6):-go([],printer_6),!.
- proprn(7):-go([],printer_7),!.
- proprn(8):-go([],printer_8),!.
- proprn(9):-go([],printer_9),!.
- proprn(10):-go([],printer_10),!.
- proprn(11):-go([],printer_11),!.
- proprn(12):-go([],printer_12),!.
- /* resoning mechine */
-
- go( _, Mygoal ):- /* My best guess */
- not(rule(_,Mygoal,_,_)),!,nl,
- result(Mygoal,Xr),nl,nl,
- write(Xr),nl,nl,
- clear,
- write("╜ß┬█╒²╚╖┬≡?╟δ╝ⁿ╚δ─π╡─╗╪┤≡(y/n)"),
- readchar(Ans),
- evalans(Ans),graphics(2,0,10),!.
-
- go( HISTORY, Mygoal ):-
- rule(RNO,Mygoal,NY,COND),
- check(RNO,HISTORY, COND),
- go([RNO|HISTORY],NY).
-
- check( RNO, HISTORY, [BNO|REST] ):- yes(BNO), !,
- check(RNO, HISTORY, REST).
- check( _, _, [BNO|_] ):- no(BNO), !,fail.
- check( RNO, HISTORY, [BNO|REST] ):- cond(BNO,NCOND),
- fronttoken(NCOND,"not",_COND),
- frontchar(_COND,_,COND),
- cond(BNO1,COND),
- notest(BNO1), !,
- check(RNO, HISTORY, REST).
- check(_,_, [BNO|_] ):- cond(BNO,NCOND),
- fronttoken(NCOND,"not",_COND),
- frontchar(_COND,_,COND),
- cond(BNO1,COND),
- yes(BNO1), !,fail.
- check( RNO, HISTORY, [BNO|REST] ):-
- cond(BNO,TEXT),
- inpq(HISTORY,RNO,BNO,TEXT),
- check(RNO, HISTORY, REST).
- check( _, _, [] ).
-
- notest(BNO):-no(BNO),!.
- notest(BNO):-not(yes(BNO)),!.
-
- inpq(HISTORY,RNO,BNO,TEXT):-
- graphics(1,0,10),
- write("╬╩╠Γ:\n ",TEXT,"┬≡ ? "),nl,nl,nl,
- write(" ╟δ╥╞╣Γ▒Ω╝ⁿ╗╪┤≡ "),nl,
- ROW = 0,
- COL = 30,
- menu(ROW,COL,9,0,["╩╟","╖±","╜Γ╩═╬¬╩▓├┤"],"",1,CHOICE),
- do_answer(HISTORY,RNO,TEXT,BNO,CHOICE).
- do_answer(_,_,_,_,0):-exit.
- do_answer(_,_,_,BNO,1):-assert(yes(BNO)),
- shiftwindow(1),write(yes),nl.
- do_answer(_,_,_,BNO,2):-assert(no(BNO)),
- shiftwindow(1),write(no),nl,fail.
- do_answer(HISTORY,RNO,TEXT,BNO,3):- !,
- shiftwindow(2),
- rule( RNO, Mygoal1, Mygoal2, _ ),
- sub_cat(Mygoal1,Mygoal2,Lstr),
- concat("I try to show that: ",Lstr,Lstr1),
- concat(Lstr1,"\nBy using rule number ",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(" ╟δ╥╞╣Γ▒Ω╝ⁿ╗╪┤≡ "),nl,
- shiftwindow(1),
- ROW=4,COL=30,
- menu(ROW,COL,95,0,["╩╟","╖±","╜Γ╩═╬¬╩▓├┤"],"",1,CHOICE),
- do_answer(HISTORY,RNO,TEXT,BNO,CHOICE).
-
- /* List Rules / Explanation Mechanism */
-
- list :- findall(RNO,rule(RNO,_,_,_),LIST),
- llist(List,Str),!,graphics(1,0,23),display(Str),!.
-
- llist([],"") :-!.
- llist([RNO|List],Str):-
- llist(List,Oldstr),
- show_rule(RNO,RNO_Str),
- concat(RNO_Str,Oldstr,Str).
-
- show_rule(RNO,Strg):-
- rule( RNO, Mygoal1, Mygoal2, CONDINGELSER),
- str_int(RNO_str,RNO),
- concat("\n Rule ",RNO_str,Ans),
- concat(Ans,": ",Ans1),
- sub_cat(Mygoal1,Mygoal2,Lstr),
- concat(Ans1,Lstr,Ans2),
- concat(Ans2,"\n if ",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 and ",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," is a ",Str),
- concat(Str,Mygoal2,Lstr).
-
- report([],"").
- report([RNO|REST],Strg) :-
- rule( RNO, Mygoal1, Mygoal2, _),
- sub_cat(Mygoal1,Mygoal2,Lstr),
- concat("\n ╬¬─π╧╘╩╛: ",Lstr,L1),
- concat(L1,"\n═¿╣²╩╣╙├╣µ╘≥ : ",L2),
- str_int(Str_RNO,RNO),
- concat(L2,Str_RNO,L3),
- concat(L3,":\n ",L4),
- show_rule(RNO,Str),
- concat(L4,Str,L5),
- report(REST,Next_strg),
- concat(L5,Next_strg,Strg).
-
- /*Update the knowledge base*/
-
- 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("condition: "),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) ).
-
-
- /*HELP !!!*/
-
- help :- file_str("geni.hlp",Help),
- display(Help).
-
- /*User commands*/
-
- load_know:-pick_dba(Data), consult(Data).
-
- save_know :- data_file(Data), bound(Data),!,
- save(Data),clearwindow,
- writef(" Your % Knowledge base has been saved",Data).
- save_know :- makewindow(11,10,9,"Name of the file",10,40,4,35),
- write("Enter Knowledge\nBase Name: "),
- readln(Data),
- assert(data_file(Data)),
- removewindow,
- save(Data),clearwindow,
- writef(" Your % Knowledge base has been saved",Data).
-
- pick_dba(Data) :- makewindow(10,7,7,"PICK A DATA FILE",10,10,10,60),
- dir("","*.kb",Data),removewindow.
-
- erase:-retract(_),fail.
- erase.
-
- clear:-retract(yes(_)),retract(no(_)),fail,!.
- clear.
-
- update:-
- shiftwindow(5),
- clearwindow,
- write("\n\tUpdate knowledge\n\t****************\n"),
- cursor(1,30),
- write("Name of category: "),
- cursor(3,30),
- write("Name of subcategory: "),
- cursor(1,50),
- readln(KAT1),KAT1><"",
- quest(KAT1,1,50,KAT),
- cursor(3,50),
- readln(SUB1),SUB1><"",
- quest(SUB1,3,50,SUB),
- readcondl(CONDL),
- getrnr(1,RNO),
- assert( rule(RNO,KAT,SUB,CONDL) ),update.
-
- quest(Q,X,Y,Q2):- Q = "?",
- shiftwindow(2),clearwindow,
- write("The categories and subcategories are objects. For example:\n"),nl,
- write("subcategory|-----| category|-----|[condition1 |------| condition2]\n"),
- write("___________|_____|_______________|_____________|______|____________"),nl,
- write("mammal |is an| animal |if it| has hair |and it| gives milk\n"),
- write("bird |is an| animal |if it| has feathers|and it| lays eggs\n"),
- shiftwindow(5),
- cursor(X,Y),
- readln(Q2).
- quest(Q,_,_,Q).
-
- evalans('y'):-
- write("\nOf course, I am always right!"),!.
- evalans(_):-
- write(" you're the boss \n Update my Knowledge Base!"),!,run.
-
- /*system commands*/
-
- reverse(X,Y):-
- reverse1([],X,Y).
- reverse1(Y,[],Y).
- reverse1(X1,[U|X2],Y):-reverse1([U|X1],X2,Y).
-
-