|
|
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: 2570 (0xa0a)
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⟧
└─⟦a7d1ea751⟧ Bits:30000550 8mm tape, Rational 1000, !users!projects 94_04_11
└─⟦129cab021⟧ »DATA«
└─⟦e24fb53b7⟧
└─⟦this⟧
with Fact;
package body Generic_Rule_Base is
Max_Rule_Count : constant := 50;
At_End_Value : constant Iterator := 0;
Max_Queries_By_Rule : constant := 10;
Last_Rule : Natural := 0;
subtype Premiss_Size is Natural range 0 .. Max_Queries_By_Rule;
type Rule (The_Query_Count : Premiss_Size := 0) is
record
The_Id : Rule_Id := No_Rule;
The_Premiss : Fact.Join_Descriptor (1 .. The_Query_Count) :=
Fact.Null_Premiss;
end record;
type Rules is array (Positive range <>) of Rule;
The_Rules : Rules (1 .. Max_Rule_Count);
The_Last_Fired_Rule : Rule_Id := No_Rule;
function Get (R : Rule_Id) return Rule_Bundles is
begin
return R.The_Bundle;
end Get;
function Firable_On_Facts return Fact.Collection is
use Fact;
begin
The_Last_Fired_Rule := No_Rule;
for I in The_Rules'First .. Last_Rule loop
declare
Answer : constant Fact.Collection :=
Fact.Retrieve (The_Rules (I).The_Premiss);
begin
if Answer /= Empty_Collection then
The_Last_Fired_Rule := The_Rules (I).The_Id;
return Answer;
end if;
end;
end loop;
return Empty_Collection;
end Firable_On_Facts;
function Firable_On_Rule return Rule_Id is
begin
return The_Last_Fired_Rule;
end Firable_On_Rule;
function Open return Iterator is
Result : Iterator := At_End_Value;
begin
for I in The_Rules'First .. Last_Rule loop
if The_Rules (I).The_Id.Is_Valid then
Result := Iterator (I);
exit;
end if;
end loop;
return Result;
end Open;
function Value (I : Iterator) return Rule_Id is
begin
return The_Rules (Positive (I)).The_Id;
end Value;
function Next (I : Iterator) return Iterator is
Result : Iterator := At_End_Value;
begin
if not At_End (I) then
for N in Positive (I + 1) .. Last_Rule loop
if The_Rules (N).The_Id.Is_Valid then
Result := Iterator (N);
exit;
end if;
end loop;
end if;
return Result;
end Next;
function At_End (I : Iterator) return Boolean is
begin
return I = 0;
end At_End;
package body Generic_Rule_Bundle is separate;
end Generic_Rule_Base;