|
|
DataMuseum.dkPresents historical artifacts from the history of: Rational R1000/400 Tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Rational R1000/400 Tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: B T
Length: 19745 (0x4d21)
Types: TextFile
Names: »B«
└─⟦149519bd4⟧ Bits:30000546 8mm tape, Rational 1000, !projects 93-07-13
└─⟦124ff5788⟧ »DATA«
└─⟦this⟧
└─⟦a7d1ea751⟧ Bits:30000550 8mm tape, Rational 1000, !users!projects 94_04_11
└─⟦129cab021⟧ »DATA«
└─⟦this⟧
└─⟦f64eaa120⟧ Bits:30000752 8mm tape, Rational 1000, !projects 93 02 16
└─⟦6f12a12be⟧ »DATA«
└─⟦this⟧
└─⟦2f6cfab89⟧ Bits:30000547 8mm tape, Rational 1000, !projects 94-01-04
└─⟦d65440be7⟧ »DATA«
└─⟦this⟧
with Instancecounter;
separate (Expertsystem)
package body Engine is
Maxrule : constant Positive := 30;
Maxlru : constant Positive := 30;
type Sorted_Rule is array (1 .. Maxlru) of Natural;
type Lru_Resolution is
record
Rule_Array : Sorted_Rule := (others => 0);
Count : Natural := 0;
end record;
Lru_Strategy : Lru_Resolution;
Cst : Tuple.Object;
Cstsort : Tuple.Object;
Csrule : Natural := 0;
Tc : Tuplecollection.Object;
T : Tuple.Object;
The_Tuple : Tuple.Object;
Localid : Contextid;
function "<" (Left, Right : Reference) return Boolean is
begin
return Left.Date < Right.Date;
end "<";
procedure Sortdate is new Tuple.Sort ("<");
procedure Evaluatetuplecollection (Rule : Positive) is
begin
if not Rulemanager.Ismasked (Context_Name, Rule) then
case Rule is
when 1 =>
Tc := Condition_1;
when 2 =>
Tc := Condition_2;
when 3 =>
Tc := Condition_3;
when 4 =>
Tc := Condition_4;
when 5 =>
Tc := Condition_5;
when 6 =>
Tc := Condition_6;
when 7 =>
Tc := Condition_7;
when 8 =>
Tc := Condition_8;
when 9 =>
Tc := Condition_9;
when 10 =>
Tc := Condition_10;
when 11 =>
Tc := Condition_11;
when 12 =>
Tc := Condition_12;
when 13 =>
Tc := Condition_13;
when 14 =>
Tc := Condition_14;
when 15 =>
Tc := Condition_15;
when 16 =>
Tc := Condition_16;
when 17 =>
Tc := Condition_17;
when 18 =>
Tc := Condition_18;
when 19 =>
Tc := Condition_19;
when 20 =>
Tc := Condition_20;
when 21 =>
Tc := Condition_21;
when 22 =>
Tc := Condition_22;
when 23 =>
Tc := Condition_23;
when 24 =>
Tc := Condition_24;
when 25 =>
Tc := Condition_25;
when 26 =>
Tc := Condition_26;
when 27 =>
Tc := Condition_27;
when 28 =>
Tc := Condition_28;
when 29 =>
Tc := Condition_29;
when 30 =>
Tc := Condition_30;
when others =>
null;
end case;
else
declare
Tc1 : Tuplecollection.Object;
begin
Tc := Tc1;
end;
end if;
if Debugger.Isdebugged (Debugger.Conditionevalued) then
case Rule is
when 1 =>
Debugger.Sendconditionevalued
(Name_1, 1, Tuplecollection.Isnotnull (Tc), Tc);
when 2 =>
Debugger.Sendconditionevalued
(Name_2, 2, Tuplecollection.Isnotnull (Tc), Tc);
when 3 =>
Debugger.Sendconditionevalued
(Name_3, 3, Tuplecollection.Isnotnull (Tc), Tc);
when 4 =>
Debugger.Sendconditionevalued
(Name_4, 4, Tuplecollection.Isnotnull (Tc), Tc);
when 5 =>
Debugger.Sendconditionevalued
(Name_5, 5, Tuplecollection.Isnotnull (Tc), Tc);
when 6 =>
Debugger.Sendconditionevalued
(Name_6, 6, Tuplecollection.Isnotnull (Tc), Tc);
when 7 =>
Debugger.Sendconditionevalued
(Name_7, 7, Tuplecollection.Isnotnull (Tc), Tc);
when 8 =>
Debugger.Sendconditionevalued
(Name_8, 8, Tuplecollection.Isnotnull (Tc), Tc);
when 9 =>
Debugger.Sendconditionevalued
(Name_9, 9, Tuplecollection.Isnotnull (Tc), Tc);
when 10 =>
Debugger.Sendconditionevalued
(Name_10, 10, Tuplecollection.Isnotnull (Tc), Tc);
when 11 =>
Debugger.Sendconditionevalued
(Name_11, 11, Tuplecollection.Isnotnull (Tc), Tc);
when 12 =>
Debugger.Sendconditionevalued
(Name_12, 12, Tuplecollection.Isnotnull (Tc), Tc);
when 13 =>
Debugger.Sendconditionevalued
(Name_13, 13, Tuplecollection.Isnotnull (Tc), Tc);
when 14 =>
Debugger.Sendconditionevalued
(Name_14, 14, Tuplecollection.Isnotnull (Tc), Tc);
when 15 =>
Debugger.Sendconditionevalued
(Name_15, 15, Tuplecollection.Isnotnull (Tc), Tc);
when 16 =>
Debugger.Sendconditionevalued
(Name_16, 16, Tuplecollection.Isnotnull (Tc), Tc);
when 17 =>
Debugger.Sendconditionevalued
(Name_17, 17, Tuplecollection.Isnotnull (Tc), Tc);
when 18 =>
Debugger.Sendconditionevalued
(Name_18, 18, Tuplecollection.Isnotnull (Tc), Tc);
when 19 =>
Debugger.Sendconditionevalued
(Name_19, 19, Tuplecollection.Isnotnull (Tc), Tc);
when 20 =>
Debugger.Sendconditionevalued
(Name_20, 20, Tuplecollection.Isnotnull (Tc), Tc);
when 21 =>
Debugger.Sendconditionevalued
(Name_21, 21, Tuplecollection.Isnotnull (Tc), Tc);
when 22 =>
Debugger.Sendconditionevalued
(Name_22, 22, Tuplecollection.Isnotnull (Tc), Tc);
when 23 =>
Debugger.Sendconditionevalued
(Name_23, 23, Tuplecollection.Isnotnull (Tc), Tc);
when 24 =>
Debugger.Sendconditionevalued
(Name_24, 24, Tuplecollection.Isnotnull (Tc), Tc);
when 25 =>
Debugger.Sendconditionevalued
(Name_25, 25, Tuplecollection.Isnotnull (Tc), Tc);
when 26 =>
Debugger.Sendconditionevalued
(Name_26, 26, Tuplecollection.Isnotnull (Tc), Tc);
when 27 =>
Debugger.Sendconditionevalued
(Name_27, 27, Tuplecollection.Isnotnull (Tc), Tc);
when 28 =>
Debugger.Sendconditionevalued
(Name_28, 28, Tuplecollection.Isnotnull (Tc), Tc);
when 29 =>
Debugger.Sendconditionevalued
(Name_29, 29, Tuplecollection.Isnotnull (Tc), Tc);
when 30 =>
Debugger.Sendconditionevalued
(Name_30, 30, Tuplecollection.Isnotnull (Tc), Tc);
when others =>
null;
end case;
end if;
end Evaluatetuplecollection;
procedure Executetuple (Rule : Natural) is
begin
case Rule is
when 1 =>
Action_1 (Cst);
when 2 =>
Action_2 (Cst);
when 3 =>
Action_3 (Cst);
when 4 =>
Action_4 (Cst);
when 5 =>
Action_5 (Cst);
when 6 =>
Action_6 (Cst);
when 7 =>
Action_7 (Cst);
when 8 =>
Action_8 (Cst);
when 9 =>
Action_9 (Cst);
when 10 =>
Action_10 (Cst);
when 11 =>
Action_11 (Cst);
when 12 =>
Action_12 (Cst);
when 13 =>
Action_13 (Cst);
when 14 =>
Action_14 (Cst);
when 15 =>
Action_15 (Cst);
when 16 =>
Action_16 (Cst);
when 17 =>
Action_17 (Cst);
when 18 =>
Action_18 (Cst);
when 19 =>
Action_19 (Cst);
when 20 =>
Action_20 (Cst);
when 21 =>
Action_21 (Cst);
when 22 =>
Action_22 (Cst);
when 23 =>
Action_23 (Cst);
when 24 =>
Action_24 (Cst);
when 25 =>
Action_25 (Cst);
when 26 =>
Action_26 (Cst);
when 27 =>
Action_27 (Cst);
when 28 =>
Action_28 (Cst);
when 29 =>
Action_29 (Cst);
when 30 =>
Action_30 (Cst);
when others =>
null;
end case;
if Rule /= 0 and then (Debugger.Isdebugged (Debugger.Choosedaction) or
Debugger.Isdebugged (Debugger.Actionfact)) then
case Rule is
when 1 =>
Debugger.Sendchoosedaction (Name_1, 1, Cst);
when 2 =>
Debugger.Sendchoosedaction (Name_2, 2, Cst);
when 3 =>
Debugger.Sendchoosedaction (Name_3, 3, Cst);
when 4 =>
Debugger.Sendchoosedaction (Name_4, 4, Cst);
when 5 =>
Debugger.Sendchoosedaction (Name_5, 5, Cst);
when 6 =>
Debugger.Sendchoosedaction (Name_6, 6, Cst);
when 7 =>
Debugger.Sendchoosedaction (Name_7, 7, Cst);
when 8 =>
Debugger.Sendchoosedaction (Name_8, 8, Cst);
when 9 =>
Debugger.Sendchoosedaction (Name_9, 9, Cst);
when 10 =>
Debugger.Sendchoosedaction (Name_10, 10, Cst);
when 11 =>
Debugger.Sendchoosedaction (Name_11, 11, Cst);
when 12 =>
Debugger.Sendchoosedaction (Name_12, 12, Cst);
when 13 =>
Debugger.Sendchoosedaction (Name_13, 13, Cst);
when 14 =>
Debugger.Sendchoosedaction (Name_14, 14, Cst);
when 15 =>
Debugger.Sendchoosedaction (Name_15, 15, Cst);
when 16 =>
Debugger.Sendchoosedaction (Name_16, 16, Cst);
when 17 =>
Debugger.Sendchoosedaction (Name_17, 17, Cst);
when 18 =>
Debugger.Sendchoosedaction (Name_18, 18, Cst);
when 19 =>
Debugger.Sendchoosedaction (Name_19, 19, Cst);
when 20 =>
Debugger.Sendchoosedaction (Name_20, 20, Cst);
when 21 =>
Debugger.Sendchoosedaction (Name_21, 21, Cst);
when 22 =>
Debugger.Sendchoosedaction (Name_22, 22, Cst);
when 23 =>
Debugger.Sendchoosedaction (Name_23, 23, Cst);
when 24 =>
Debugger.Sendchoosedaction (Name_24, 24, Cst);
when 25 =>
Debugger.Sendchoosedaction (Name_25, 25, Cst);
when 26 =>
Debugger.Sendchoosedaction (Name_26, 26, Cst);
when 27 =>
Debugger.Sendchoosedaction (Name_27, 27, Cst);
when 28 =>
Debugger.Sendchoosedaction (Name_28, 28, Cst);
when 29 =>
Debugger.Sendchoosedaction (Name_29, 29, Cst);
when 30 =>
Debugger.Sendchoosedaction (Name_30, 30, Cst);
when others =>
Debugger.Sendchoosedaction ("NO OPERATION ! ", 0, Cst);
end case;
end if;
Debugger.Sendnewstep;
if Rule = 0 then
Debugger.Sendfailed;
end if;
end Executetuple;
procedure Lrureset is
begin
for I in 1 .. Maxlru loop
Lru_Strategy.Rule_Array (I) := 0;
end loop;
Lru_Strategy.Count := 0;
end Lrureset;
function Lruinfer return Boolean is
The_Rule : Natural := 0;
Pos : Natural := 0;
Last_Pos : Natural := Integer'Last;
begin
Debugger.Sendconflictsetstarted;
for I in 1 .. Used_Rules loop
Evaluatetuplecollection (I);
if Tuplecollection.Isnotnull (Tc) then
Pos := 0;
for J in 1 .. Lru_Strategy.Count loop
if Lru_Strategy.Rule_Array (J) = I then
Pos := J;
end if;
end loop;
if Pos = 0 then
The_Rule := I;
exit;
elsif Pos < Last_Pos then
Last_Pos := Pos;
The_Rule := Lru_Strategy.Rule_Array (Last_Pos);
end if;
end if;
end loop;
Debugger.Sendconflictsetfinished;
if The_Rule = 0 then
Lrureset;
Debugger.Sendnewstep;
Debugger.Sendfailed;
return False;
end if;
Lru_Strategy.Count := Lru_Strategy.Count + 1;
if Lru_Strategy.Count > Maxlru then
Lru_Strategy.Count := Maxlru;
for I in 1 .. Maxlru - 1 loop
Lru_Strategy.Rule_Array (I) := Lru_Strategy.Rule_Array (I + 1);
end loop;
end if;
Lru_Strategy.Rule_Array (Lru_Strategy.Count) := The_Rule;
Evaluatetuplecollection (The_Rule);
Cst := Tuplecollection.First (Tc);
if Debugger.Isdebugged (Debugger.Choosedrule) or
Debugger.Isdebugged (Debugger.Rulefacts) then
Debugger.Sendchoosedrule (The_Rule, Cst);
end if;
Executetuple (The_Rule);
return True;
end Lruinfer;
function Lexormeainfer return Boolean is
First_Tuple : Boolean := True;
begin
Csrule := 0;
Debugger.Sendconflictsetstarted;
for I in 1 .. Used_Rules loop
Evaluatetuplecollection (I);
for J in 1 .. Tuplecollection.Cardinality (Tc) loop
T := Tuplecollection.Get (Tc, J);
if First_Tuple then
Cst := T;
Sortdate (T);
Cstsort := T;
Csrule := I;
First_Tuple := False;
else
if Resolution = Mea and Tuple.First (T).Date >
Tuple.First (Cst).Date then
Csrule := I;
Cst := T;
else
The_Tuple := T;
Sortdate (T);
for K in 1 .. Tuple.Cardinality (T) loop
if Tuple.Get (T, K).Date >
Tuple.Get (Cstsort, K).Date then
Csrule := I;
Cst := The_Tuple;
Cstsort := T;
exit;
elsif Tuple.Get (T, K).Date <
Tuple.Get (Cstsort, K).Date then
exit;
end if;
if K = Tuple.Cardinality (Cst) then
exit;
end if;
end loop;
end if;
end if;
end loop;
end loop;
Debugger.Sendconflictsetfinished;
if Csrule /= 0 and then (Debugger.Isdebugged (Debugger.Choosedrule) or
Debugger.Isdebugged (Debugger.Rulefacts)) then
Debugger.Sendchoosedrule (Csrule, Cst);
end if;
Executetuple (Csrule);
return Csrule /= 0;
end Lexormeainfer;
function Firstinfer return Boolean is
begin
Debugger.Sendconflictsetstarted;
for I in 1 .. Used_Rules loop
Evaluatetuplecollection (I);
if Tuplecollection.Isnotnull (Tc) then
Debugger.Sendconflictsetfinished;
Cst := Tuplecollection.First (Tc);
if Debugger.Isdebugged (Debugger.Choosedrule) or
Debugger.Isdebugged (Debugger.Rulefacts) then
Debugger.Sendchoosedrule (I, Cst);
end if;
Executetuple (I);
return True;
end if;
end loop;
Debugger.Sendnewstep;
Debugger.Sendfailed;
return False;
end Firstinfer;
generic
with function Inferstrategy return Boolean;
Strategynam : Strategyname := " ??? ";
function Stepnumber (Step : Natural) return Boolean;
function Stepnumber (Step : Natural) return Boolean is
Astep : Boolean;
begin
if Resolution = Lex then
Debugger.Sendstrategyused (" LEX ");
elsif Resolution = Mea then
Debugger.Sendstrategyused (" MEA ");
else
Debugger.Sendstrategyused (Strategynam);
end if;
if Step = Any then
loop
Astep := Inferstrategy;
exit when not Astep;
end loop;
else
for I in 1 .. Step loop
Astep := Inferstrategy;
exit when not Astep;
end loop;
end if;
return Astep;
end Stepnumber;
function Lexormeastrategy is new Stepnumber (Lexormeainfer, " /// ");
function Lrustrategy is new Stepnumber (Lruinfer, " LRU ");
function Firststrategy is new Stepnumber (Firstinfer, "FIRST");
function Inference (Step : Natural := 1) return Boolean is
begin
Debugger.Sendcontextentered (Context_Name, Localid);
if Resolution = Lex or Resolution = Mea then
return Lexormeastrategy (Step);
elsif Resolution = Lru then
return Lrustrategy (Step);
else
return Firststrategy (Step);
end if;
end Inference;
begin
Localid := Instancecounter.Newcontext (Context_Name);
Debugger.Sendrulesnames (Localid, Context_Name, Name_1, Name_2,
Name_3, Name_4, Name_5, Name_6, Name_7,
Name_8, Name_9, Name_10, Name_11, Name_12,
Name_13, Name_14, Name_15, Name_16, Name_17,
Name_18, Name_19, Name_20, Name_21, Name_22,
Name_23, Name_24, Name_25, Name_26,
Name_27, Name_28, Name_29, Name_30);
end Engine;