%      Production system KORE/IE (version 12.48)
%
%          (C)1992 Institute for New Generation Computer Technology
%                          (Read COPYRIGHT for detailed information)
%
%      1992.7 Check and refine every programs 
%                             for IFS (ICOT Free Software) release.
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%% RUN %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%% USE
use Rule_Base :-
	retract_all(rule_base_name(_)),
	asserta(rule_base_name(Rule_Base)),
	!.

%%%%% RUN/0
run :-
	rule_base_name(Rule_Base),
	watch_mode(Rule_Base,Watch_Mode),
	abolish(now_running,2),
	asserta(now_running(Rule_Base,running)),
	running(9999,Rule_Base,Watch_Mode).

%%%%% RUN/1
run(Rule_Base) :-
	atom(Rule_Base),
	watch_mode(Rule_Base,Watch_Mode),
	abolish(now_running,2),
	asserta(now_running(Rule_Base,running)),
	running(9999,Rule_Base,Watch_Mode).
run(Integer) :-
	integer(Integer),
	rule_base_name(Rule_Base),
	watch_mode(Rule_Base,Watch_Mode),
	abolish(now_running,2),
	asserta(now_running(Rule_Base,running)),
	running(Integer,Rule_Base,Watch_Mode).

%%%%% RUN/2
run(Rule_Base,Integer) :-
	watch_mode(Rule_Base,Watch_Mode),
	asserta(now_running(Rule_Base,running)),
	running(Integer,Rule_Base,Watch_Mode).

%%%%% running
running(0,F,_) :-
	retract_all(now_running(F,_)),
	write('## Break ##'),
	nl,
	!.
running(N,Rule_Base,0) :-
	now_runnig(Rule_Base,running),
	strategy_rec(Rule_Base,_,Strategy),
	retract(cs(Rule_Base,[[Rule_Name1,Time_Tags1,STT1,NUS1,Var_List1]|CS])),
	conflict_resolution(Strategy,CS,
				[Rule_Name1,Time_Tags1,STT1,NUS1,Var_List1],
				[Rule_Name,Time_Tags,_,_,Var_List],
				New_CS),
	asserta(cs(Rule_Base,New_CS)),
	rhs(Rule_Name,Rule_Base,Var_List,Time_Tags,Time_Tags),
	NN is N - 1,
	!,
	running(NN,Rule_Base,0).
running(N,Rule_Base,Watch_Mode) :-
        now_running(Rule_Base,running),
	strategy_rec(Rule_Base,_,Strategy),
	retract(cs(Rule_Base,[[Rule_Name1,Time_Tags1,STT1,NUS1,Var_List1]|CS])),
	conflict_resolution(Strategy,CS,
				[Rule_Name1,Time_Tags1,STT1,NUS1,Var_List1],
				[Rule_Name,Time_Tags,_,_,Var_List],
				New_CS),
	asserta(cs(Rule_Base,New_CS)),
	watch_disp(Watch_Mode,Rule_Base,Rule_Name,Time_Tags),
	do_rhs(Watch_Mode,Rule_Name,Rule_Base,Var_List,Time_Tags,Time_Tags),
	watch_disp(Watch_Mode,Rule_Base),
	NN is N - 1,
	!,
	running(NN,Rule_Base,Watch_Mode).
running(_,F,_) :-
	retract(now_running(F,stop)),
	write('End ... Explicit STOP '),
	nl,
	!.
running(_,F,_) :-
	retract_all(now_running(F,_)),
	retract_all(solving_contradiction(F,_,_,_)),
	write('End ... No Production '),
	nl,
	!.
