tasks a-s
This commit is contained in:
parent
47bf37c096
commit
b83f433714
12433 changed files with 156208 additions and 123 deletions
|
|
@ -0,0 +1,50 @@
|
|||
with Ada.Text_IO;
|
||||
|
||||
procedure Partial_Function_Application is
|
||||
|
||||
type Sequence is array(Positive range <>) of Integer;
|
||||
|
||||
-- declare a function FS with a generic parameter F and a normal parameter S
|
||||
generic
|
||||
with function F(I: Integer) return Integer; -- generic parameter
|
||||
function FS (S: Sequence) return Sequence;
|
||||
|
||||
-- define FS
|
||||
function FS (S: Sequence) return Sequence is
|
||||
Result: Sequence(S'First .. S'Last);
|
||||
begin
|
||||
for Idx in S'Range loop
|
||||
Result(Idx) := F(S(Idx));
|
||||
end loop;
|
||||
return Result;
|
||||
end FS;
|
||||
|
||||
-- define functions F1 and F2
|
||||
function F1(I: Integer) return Integer is
|
||||
begin
|
||||
return 2*I;
|
||||
end F1;
|
||||
|
||||
function F2(I: Integer) return Integer is
|
||||
begin
|
||||
return I**2;
|
||||
end F2;
|
||||
|
||||
-- instantiate the function FS by F1 and F2 (partially apply F1 and F2 to FS)
|
||||
function FSF1 is new FS(F1);
|
||||
function FSF2 is new FS(F2);
|
||||
|
||||
procedure Print(S: Sequence) is
|
||||
begin
|
||||
for Idx in S'Range loop
|
||||
Ada.Text_IO.Put(Integer'Image(S(Idx)));
|
||||
end loop;
|
||||
Ada.Text_IO.New_Line;
|
||||
end Print;
|
||||
|
||||
begin
|
||||
Print(FSF1((0,1,2,3)));
|
||||
Print(FSF2((0,1,2,3)));
|
||||
Print(FSF1((2,4,6,8)));
|
||||
Print(FSF2((2,4,6,8)));
|
||||
end Partial_Function_Application;
|
||||
Loading…
Add table
Add a link
Reference in a new issue