RosettaCodeData/Task/Man-or-boy-test/Ada/man-or-boy-test-2.ada
Ingy döt Net db842d013d A-M baby
2013-04-10 21:29:02 -07:00

30 lines
828 B
Ada

with Ada.Text_IO; use Ada.Text_IO;
procedure Man_Or_Boy is
function Zero return Integer is (0);
function One return Integer is (1);
function Neg return Integer is (-1);
function A
(K : Integer;
X1, X2, X3, X4, X5 : access function return Integer)
return Integer is
M : Integer := K; -- K is read-only in Ada. Here is a mutable copy of
function B return Integer is
begin
M := M - 1;
return A (M, B'Access, X1, X2, X3, X4);
end B;
begin
return (if M <= 0 then X4.all + X5.all else B);
end A;
begin
Put_Line
(Integer'Image
(A (K => 10,
X1 => One'Access,
X2 => Neg'Access,
X3 => Neg'Access,
X4 => One'Access,
X5 => Zero'Access)));
end Man_Or_Boy;