-- Purpose: This program demonstrates static and dynamic predicates -- with ada.integer_text_io; use ada.integer_text_io; with ada.text_io; use ada.text_io; with Ada.Exceptions; use Ada.Exceptions; procedure static_pred is subtype Small_Ints1 is Natural range 0 .. 10; subtype Small_Ints2 is Natural with static_predicate => (Small_Ints2 in 1 .. 5 | 11 .. 15 | 99) or Small_Ints2 > 1_000 or Small_Ints2 = 10_000; subtype Odd is Integer with dynamic_predicate => Odd mod 2 = 1; subtype Even is Integer with dynamic_predicate => Even not in Odd; -- Caution: Computationally intensive! subtype Primes is Positive range 2 .. Positive'Last with dynamic_predicate => (for all i in 2 .. primes / 2 => primes mod i /= 0); -- Caution: Computationally intensive! subtype Composite is Positive range 4 .. Positive'Last with dynamic_predicate => (for some i in 4 .. Composite / 2 => Composite mod i = 0); s : Small_Ints2; begin loop begin put ("Enter int: "); get(s); put(s); new_line; exception when e: others => put_line (Exception_Name (e) & " " & Exception_Message (e)); end; end loop; end static_pred;