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 - downloadIndex: ┃ B T ┃
Length: 2728 (0xaa8) Types: TextFile Names: »B«
└─⟦a7d1ea751⟧ Bits:30000550 8mm tape, Rational 1000, !users!projects 94_04_11 └─ ⟦129cab021⟧ »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⟧
separate (Towers_Of_Hanoi_Rules_For_Graphic) package body Moving_Guru_Rule is function Premiss return Fact_Queries is The_Priority : constant Alias.Name := Alias.P; The_Source : constant Alias.Name := Alias.S; The_Destination : constant Alias.Name := Alias.D; The_Level : constant Alias.Name := Alias.L; begin return (Movements.Exist ((Count => Is_Equal (1), Priority => Define_As (The_Priority), From_Tower => Define_As (The_Source), To_Tower => Define_As (The_Destination))), Towers.Exist ((Location => Is_Equal (The_Source), Disk_Count => Is_Greater (0) and Define_As (The_Level))), Towers.Exist ((Location => Is_Equal (The_Destination), Disk_Count => Is_Any)), Disks.Exist ((Tower => Is_Equal (The_Source), Level => Is_Equal (The_Level), Size => 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 : Fact_Name renames The_Facts (2); The_Destination : Fact_Name renames The_Facts (3); The_Disk : Fact_Name renames The_Facts (4); The_Disk_Count : Natural; The_Destination_Location : Natural; begin The_Disk_Count := Towers.Get (The_Source, Disk_Count); Towers.Change (The_Source, Disk_Count, The_Disk_Count - 1); Delete_Disk (For_Needle => Towers.Get (The_Source, Location), The_Disk => Disks.Get (The_Disk, Level), Its_Size => Disks.Get (The_Disk, Size)); The_Disk_Count := Towers.Get (The_Destination, Disk_Count); Towers.Change (The_Destination, Disk_Count, The_Disk_Count + 1); Print_Disk (For_Needle => Towers.Get (The_Destination, Location), The_Disk => The_Disk_Count + 1, Its_Size => Disks.Get (The_Disk, Size)); The_Destination_Location := Towers.Get (The_Destination, Location); Disks.Change (The_Disk, Tower, The_Destination_Location); Disks.Change (The_Disk, Level, The_Disk_Count + 1); Movements.Delete (The_Movement); delay 0.5; end Action; end Moving_Guru_Rule;