DataMuseum.dk

Presents historical artifacts from the history of:

Rational R1000/400 Tapes

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 Tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download
Index: ┃ B T

⟦535d477d1⟧ TextFile

    Length: 2475 (0x9ab)
    Types: TextFile
    Names: »B«

Derivation

└─⟦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⟧ 

TextFile

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 Queries is
        The_Priority : constant Alias := Alias'(P);
    begin
        return (Movements.Exist ((Count => Is_Greater (1),  
                                  Priority => Say_It_Is (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;