DataMuseum.dk

Presents historical artifacts from the history of:

Rational R1000/400

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Rational R1000/400

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦665703199⟧ Ada Source

    Length: 5120 (0x1400)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Reformulating_Guru_Rule, seg_02d0d5, seg_02d121, seg_0399ea, seg_03b938, seg_03c0af, seg_03c51b, seg_03c6c2, seg_03c9f7, seg_04a9ce, seg_04b43b, separate Towers_Of_Hanoi_Rules_For_Benchmark

Derivation

└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
    └─ ⟦5a81ac88f⟧ »Space Info Vol 1« 
        └─⟦this⟧ 
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
    └─ ⟦cfc2e13cd⟧ »Space Info Vol 2« 
        └─⟦this⟧ 

E3 Source Code



separate (Towers_Of_Hanoi_Rules_For_Benchmark)
package body Reformulating_Guru_Rule is
    Decision_Table : constant array (1 .. 3, 1 .. 3) of Integer :=
       (1 => (3, 3, 2), 2 => (3, 3, 1), 3 => (2, 1, 1));

    function Other_Tower_Than
                (First, Second : Slot.Object) return Slot.Object is
        Result : Integer;
    begin
        Result := Decision_Table (Slot.Get (First), Slot.Get (Second));  
        return Slot.Value (Result);
    end Other_Tower_Than;

    function More_Urgent (Than : Slot.Object) return Slot.Object is  
        use Slot.Operators;
    begin
        return Than + Slot.Value (1);
    end More_Urgent;

    function Premiss return Fact_Queries is
        The_Priority : constant Alias.Name := Alias.P;
    begin
        return (Movements.Exist ((Count => Is_Greater (1),  
                                  Priority => Define_As (The_Priority),
                                  From_Tower | To_Tower => Is_Any)),

                Movements.Absent ((Priority => Is_Greater (The_Priority),
                                   From_Tower | To_Tower | Count => Is_Any)));
    end Premiss;

    procedure Action (The_Facts : Fact_Collection) is
        The_Movement : Fact_Name renames The_Facts (1);
        The_Source, The_Destination, The_Count, The_Priority : Slot.Object;
        Move_First, Move_Second, Move_Third : Slot.Object;
        The_Other_Tower : Slot.Object;  
        One : constant Slot.Object := Slot.Value (1);
        use Slot.Operators;
    begin
        The_Source      := Movements.Get (The_Movement, From_Tower);
        The_Destination := Movements.Get (The_Movement, To_Tower);
        The_Count       := Movements.Get (The_Movement, Count);
        The_Priority    := Movements.Get (The_Movement, Priority);

        Move_Third  := More_Urgent (Than => The_Priority);
        Move_Second := More_Urgent (Than => Move_Third);
        Move_First  := More_Urgent (Than => Move_Second);

        The_Other_Tower := Other_Tower_Than (The_Source, The_Destination);
        Movements.Add ((Priority   => Move_First,
                        From_Tower => The_Source,
                        To_Tower   => The_Other_Tower,
                        Count      => The_Count - One));


        Movements.Add ((Priority   => Move_Second,
                        From_Tower => The_Source,
                        To_Tower   => The_Destination,
                        Count      => One));

        Movements.Add ((Priority   => Move_Third,
                        From_Tower => The_Other_Tower,
                        To_Tower   => The_Destination,
                        Count      => The_Count - One));
        Movements.Delete (The_Movement);
    end Action;

end Reformulating_Guru_Rule;

E3 Meta Data

    nblk1=4
    nid=2
    hdr6=6
        [0x00] rec0=1b rec1=00 rec2=01 rec3=000
        [0x01] rec0=14 rec1=00 rec2=04 rec3=05c
        [0x02] rec0=16 rec1=00 rec2=03 rec3=000
        [0x03] rec0=10 rec1=00 rec2=02 rec3=000
    tail 0x21526152e84154d3d405f 0x42a00088462063c03
Free Block Chain:
  0x2: 0000  00 00 02 47 80 2b 20 20 20 20 20 20 20 20 20 20  ┆   G +          ┆