Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Prolog > Экспертные системы Visual Prolog 5.2


Автор: Aleksfoss 19.7.2015, 10:37
Привет всем, кто нибудь может подсказать где в программе база знаний, база данных и база правил? Буду очень признателен)

Database - framedb
type(INTEGER,STRING,SLIST)
classroom(STRING,INTEGER,ILIST)
ntype(INTEGER)
predicates
getname(SLIST)
checkanswer(INTEGER,SLIST)
getvalue(SLIST,ILIST)
allparam(SLIST,ILIST,STRING,STRING)
nondeterm init
task_win_eh : EHANDLER

clauses
getname([NAME|L]):-
NAME=dlg_GetStr("Имя параметра","Параметры имени:",""),
NAME<>"",
P=dlg_Ask("Хотите продолжить ввод имени параметра?",["Да","Нет" ]),
checkanswer(P,L).
checkanswer(0,L):-getname(L).
checkanswer(1,[]).

getvalue([],[]).
getvalue([NAME|L1],[VALUE|L2]):-
concat(NAME,": ",STR),
VALUESTR=dlg_GetStr("Значения параметров",STR,""),
str_int(VALUESTR,VALUE),
VALUE>=0,
getvalue(L1,L2).

allparam([],[],S,S).
allparam([NAME|L1],[VALUE|L2],STR,S):-
format(STRVALUE,"%",VALUE),
concat(STR,NAME,STR2),
concat(STR2,": ",STR3),
concat(STR3,STRVALUE,STR4),
concat(STR4,"\n",STR5),
allparam(L1,L2,STR5,S).
init:-ntype(_).    
init:-asserta(ntype(0)).

%BEGIN Task Window, e_Create
task_win_eh(_Win,e_Create(_),0):-!,
consult("frame.dba",framedb),
init,    

%BEGIN addclass, e_Create
dlg_addclass_eh(_Win,e_Create(_CreationData),0):-!,
H=win_GetCtlHandle(_Win,typelist),
retract(type(NTYPE,TYPE1,PLIST)),
assertz(type(NTYPE,TYPE1,PLIST)),
type(_,TYPE2,_),
lbox_add(H,TYPE2),
TYPE1=TYPE2,
lbox_SetSel(H,0,b_true),
!.
%END addclass, e_Create

%BEGIN addclass, setvalue _CtlInfo
dlg_addclass_eh(_Win,e_Control(setvalue,_CtrlType, _CtrlWin,_CtlInfo),0):-!,
H=win_GetCtlHandle(_Win,nameclass),
NAMECLASS=win_GetText(H),
NAMECLASS<>"",
not(classroom(NAMECLASS,_,_)),
LH=win_GetCtlHandle(_Win,typelist),
lbox_GetSel(LH,S,_),
S=[TYPE|_],
type(NTYPE,TYPE,LPROP),
getvalue(LPROP,LVALUE),
asserta(classroom(NAMECLASS,NTYPE,LVALUE)),
win_Destroy(_Win),
dlg_note("Дом добавлен"),
!.
dlg_addclass_eh(_Win,e_Control(setvalue,_CtrlType, _CtrlWin,_CtlInfo),0):-!,
dlg_error("Дом не добавлен").
%END addclass, setvalue _CtlInfo

%BEGIN ADDTYPE, setparam _CtlInfo
dlg_addtype_eh(_Win,e_Control(setparam,_CtrlType,_ CtrlWin,_CtlInfo),0):-!,
H1=win_GetCtlHandle(_win,typename),
TYPE=win_GetText(H1),TYPE<>"",not(type(_,TYPE,_)),
getname(L),
retract(ntype(N)),
N2=N+1,
asserta(ntype(N2)),
asserta(type(N2,TYPE,L)),
win_Destroy(_win),
dlg_note("Новый тип был добавлен."),
!.
dlg_addtype_eh(_Win,e_Control(setparam,_CtrlType,_ CtrlWin,_CtlInfo),0):-!,
dlg_error("Новый тип не был добавлен").
%END ADDTYPE, setparam _CtlInfo

%BEGIN findclass, e_Create
dlg_findclass_eh(_Win,e_Create(_CreationData),0):-!,
H=win_GetCtlHandle(_Win,classlist),
retract(classroom(CLASS1,NTYPE,LVALUE)),
assertz(classroom(CLASS1,NTYPE,LVALUE)),
classroom(CLASS2,_,_),
lbox_add(H,CLASS2),
CLASS1=CLASS2,
lbox_SetSel(H,0,b_true),
!.
%END findclass, e_Create

%BEGIN findclass, classlist _CtlInfo
dlg_findclass_eh(_Win,e_Control(classlist,_CtrlTyp e,_CtrlWin,_CtlInfo),0):-!,
H=win_GetCtlHandle(_Win,classlist),
lbox_GetSel(H,S,_),

S=[CLASSROOM|_],
classroom(CLASSROOM,NTYPE,LVALUE),
type(NTYPE,TYPE,LPARAM),
STR="Тип: ",
concat(STR,TYPE,STR2),
concat(STR2,"\n",STR3),
allparam(LPARAM,LVALUE,STR3,STR4),
H2=win_GetCtlHandle(_Win,textparam),
win_SetText(H2,STR4),
lbox_Clear(H),
!.
%END findclass, classlist _CtlInfo

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)