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

⟦82a02c31a⟧ Ada Source

    Length: 4096 (0x1000)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Reformulating_Guru_Rule, seg_02cefa, separate Towers_Of_Hanoi_Rules_For_Benchmark

Derivation

└─⟦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 : Integer) return Integer is
    begin
        return Decision_Table (First, Second);
    end Other_Tower_Than;

    function More_Urgent (Than : Integer) return Integer is
    begin
        return Than + 1;
    end More_Urgent;

    function Premiss return Fact_Queries is
        The_Priority : constant Alias.Name := Name'(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 : Integer;
        Move_First, Move_Second, Move_Third : Integer;
        The_Other_Tower : Integer;
    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 - 1));


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

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

end Reformulating_Guru_Rule;

E3 Meta Data

    nblk1=3
    nid=0
    hdr6=6
        [0x00] rec0=1a rec1=00 rec2=01 rec3=01a
        [0x01] rec0=15 rec1=00 rec2=03 rec3=01e
        [0x02] rec0=10 rec1=00 rec2=02 rec3=000
    tail 0x21525b50c84124dcd03eb 0x42a00088462063c03