RubyのBlockが欲しいよ

AdaもRubyみたいに関数にブロック渡せればいいのになぁ。

OOPのドット記法みたいに、引数の最初(最後でもいいかも)にaccess {procedure, function}が来てる場合はブロックをおしりにつなげられるとか。

yield自体は普通に関数呼び出しでいいから予約後に足さなくてもいけそう。

たとえばmap!がこんな感じに書けるとか。

with Ada.Text_IO;         use Ada.Text_IO;
with Ada.Integer_Text_IO; use Ada.Integer_Text_IO;
procedure Want_Yield is
   type Integer_Array is array (Integer range <>) of Integer;

   procedure Map (Block : access procedure (Element : in out Integer);
                  About : in out Integer_Array) is
   begin
      for I in About'Range loop
         Block (About(I));
      end loop;
   end Map;

   procedure Predefined_Three_Times (I : in out Integer) is
   begin
      I := I * 3;
   end Predefined_Three_Times;

   X : Integer_Array (1 .. 3) := (1, 3, 5);

begin
   -- 今許されている方法
   Map (Predefined_Three_Times'Access, X);
   Put (X(1)); Put (X(2)); Put (X(3)); New_Line;

   -- Ada15あたりで是非
-- Map (X) (I : in out Integer) do
-- begin
--    I := I * 3;
-- end Map;
-- Put (X(1)); Put (X(2)); Put (X(3)); New_Line;
end Want_Yield;