comp.lang.ada
 help / color / mirror / Atom feed
From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: Generators/coroutines in future Ada?
Date: Wed, 12 Jul 2017 15:38:54 +0200
Date: 2017-07-12T15:38:54+02:00	[thread overview]
Message-ID: <ok58pd$evn$1@gioia.aioe.org> (raw)
In-Reply-To: ok56u3$but$1@gioia.aioe.org

On 12/07/2017 15:07, Victor Porton wrote:
> J-P. Rosen wrote:
> 
>> Le 12/07/2017 à 01:19, Victor Porton a écrit :
>>> Dmitry A. Kazakov wrote:
>>>> I don't understand what is wrong with:
>>>>
>>>>      type Stateful is limited private;
>>>>      function Generate (X : not null access Stateful) return Things;
>>>
>>> The thing "wrong" with this, is that it is sometimes hard to implement
>>> Generate(). In Python this can be done in an easier way by using
>>> generators (Python's "yield" keywords).
>>>
>> Please provide a concrete example, so we can compare solutions!
> 
> I don't have at hand an Ada example. So instead I will give two examples in
> Python with and without explicit generators. Which of the two is simpler?
> 
>     1 # Using an explicit generator function
>     2 def firstn(n):
>     3     num, nums = 0, []
>     4     while num < n:
>     5         yield num
>     6         num += 1


    type First (N : Positive) is tagged limited record
       Self    : not null access First'Class := First'Unchecked_Access;
       Current : Positive := 1;
    end record;
    function Value (Generator : First) return Integer;

    function Value (Generator : First) return Integer is
    begin
       if Generator.Current > Generator.N then
          raise End_Error;
       else
          return Result : Integer := Generator.Current do
             Generator.Self.Current := Generator.Current + 1;
          end return;
       end if;
    end Value;

and then

    Dozen : First (12);
begin
    loop
       Put_Line (Integer'Image (Dozen.Value));
    end loop;
exception
    when End_Error =>
       null;

This should print
  1
  2
...
  12

-- 
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de

  reply	other threads:[~2017-07-12 13:38 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-07-09 20:19 Generators/coroutines in future Ada? Victor Porton
2017-07-09 21:28 ` Dennis Lee Bieber
2017-07-09 23:56   ` Victor Porton
2017-07-10  7:33   ` Dmitry A. Kazakov
2017-07-10 13:38 ` Victor Porton
2017-07-10 17:01   ` Paul Rubin
2017-07-10 21:24     ` Victor Porton
2017-07-12 17:09       ` Paul Rubin
2017-07-12 17:39         ` Victor Porton
2017-07-13  6:35           ` Paul Rubin
2017-07-11  9:42   ` J-P. Rosen
2017-07-11 12:52     ` Victor Porton
2017-07-11 13:01       ` Victor Porton
2017-07-11 13:26         ` J-P. Rosen
2017-07-11 16:04           ` Dennis Lee Bieber
2017-07-11 16:59           ` Dmitry A. Kazakov
2017-07-11 19:52             ` Pascal Obry
2017-07-11 20:18               ` Dmitry A. Kazakov
2017-07-11 18:36           ` Victor Porton
2017-07-11 19:22             ` J-P. Rosen
2017-07-11 20:25               ` Dmitry A. Kazakov
2017-07-11 23:19                 ` Victor Porton
2017-07-12  4:54                   ` J-P. Rosen
2017-07-12 13:07                     ` Victor Porton
2017-07-12 13:38                       ` Dmitry A. Kazakov [this message]
2017-07-12  5:35                   ` Randy Brukardt
2017-07-12  7:27                     ` Dmitry A. Kazakov
2017-07-12 22:47                     ` Shark8
2017-07-16 13:11                       ` Robert Eachus
2017-07-17 23:54                       ` Randy Brukardt
2017-07-18  7:38                         ` Dmitry A. Kazakov
2017-07-12  7:19                   ` Dmitry A. Kazakov
2017-07-12  6:35                 ` G.B.
2017-07-12  7:34                   ` Dmitry A. Kazakov
2017-07-12 20:49                     ` G.B.
2017-07-13  8:18                       ` Dmitry A. Kazakov
2017-07-12 17:34           ` Paul Rubin
2017-07-11 19:27         ` Simon Wright
2017-07-12  5:42     ` darkestkhan
2017-07-12  8:57     ` Maciej Sobczak
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox