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
next prev parent 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