-- Programmed by Jedidiah Barber -- Licensed under the Sunset License v1.0 -- See license.txt for further details with Ada.Text_IO, Kompsos.Math, Kompsos.Pretty_Print; procedure Expo is package TIO renames Ada.Text_IO; package InKomp is new Kompsos (Integer); use InKomp; package Math is new InKomp.Math (0, 1); package Printer is new InKomp.Pretty_Print (Integer'Image); function B (Item : in Natural) return Term renames Math.Build; function P (Item : in Integer) return String renames Printer.Image; function PV (Item : in Term) return String is begin return P (Math.Value (Item)); exception when others => return Printer.Image (Item); end PV; procedure Exp_Test (Base, Exponent : in Natural) is Relation : Goal := Empty_Goal; Power : constant Term := Relation.Fresh; Result : State; begin Math.Exponential (Relation, B (Base) & B (Exponent) & Power); TIO.Put (P (Base) & "^" & P (Exponent) & " = "); Result := Relation.Run; TIO.Put_Line (PV (Power.Resolve (Result))); end Exp_Test; procedure Repeated_Mult_Test (Base, Exponent : in Natural) is Relation : Goal := Empty_Goal; Power : constant Term := Relation.Fresh; Result : State; begin Math.Repeated_Multiply (Relation, B (Base) & B (Exponent) & Power); TIO.Put (P (Base) & "^" & P (Exponent) & " = "); Result := Relation.Run; TIO.Put_Line (PV (Power.Resolve (Result))); end Repeated_Mult_Test; begin TIO.Put_Line ("Exponential"); Exp_Test (3, 4); TIO.New_Line; TIO.Put_Line ("Repeated Multiply"); Repeated_Mult_Test (0, 2); Repeated_Mult_Test (1, 10); Repeated_Mult_Test (3, 4); Repeated_Mult_Test (4, 3); Repeated_Mult_Test (5, 5); TIO.New_Line; TIO.Put_Line ("Expected Failure"); Repeated_Mult_Test (0, 0); end Expo;