-- Code on page 480 from -- Kenneth C. Louden, Programming Languages -- Principles and Practice 2nd Edition -- Copyright (C) Brooks-Cole/ITP, 2003 -- Attempt to define a compose higher-order -- function in Ada (causes a compile-time error) with Ada.Text_IO; use Ada.Text_IO; with Ada.Integer_Text_IO; use Ada.Integer_Text_IO; procedure ComposeTry is type IntProc is access function (x: in integer) return integer; function compose (f, g: in IntProc) return IntProc is function tempProc (x: in integer) return integer is begin return f(g(x)); end tempProc; begin return tempProc'access; end compose; function inc(x: integer) return integer is begin return x + 1; end inc; f: IntProc; begin f := compose(inc'access,inc'access); put(f(2)); end ComposeTry;