comp.lang.ada
 help / color / mirror / Atom feed
From: Robert A Duff <bobduff@shell01.TheWorld.com>
Subject: Re: Proposed change to BC iterator parameters
Date: 19 Dec 2003 17:47:48 -0500
Date: 2003-12-19T17:47:48-05:00	[thread overview]
Message-ID: <wcc65gcwhkb.fsf@shell01.TheWorld.com> (raw)
In-Reply-To: brv8ae$3uf$1@a1-hrz.uni-duisburg.de

Georg Bauhaus <sb463ba@l1-hrz.uni-duisburg.de> writes:

> Dmitry A. Kazakov <mailbox@dmitry-kazakov.de> wrote:
>  
> : function Search (X : Container; Key : Item_Key) return Item is
> : begin
> :   Enumerate
> :   (  X,
> :      procedure (I : Item) is
> :      begin
> :         if Get_Key (I) = Key then
> :            return I out Search; -- Return through all nested contexts
> :         end if;
> :      end;
> :   );
> :   raise Nothing_Found;
> : end Search;

I agree with Mr. Kazakov that the above syntax is not pretty.
I admit I haven't come up with any better syntax.

> wouldn't an active(?) iteration do the job in a satisfying way,
> using is_done, element, and next, in a loop?

That's the style I like to call "cursors".  The C++ Standard Template
Library calls them iterators.  The same with Matt Heaney's Charles
library, which is based on the STL.  I don't call like to call it an
iterator, because it doesn't iterate.  A cursor is just a pointer to
some "place" in the data structure, and the client can move to the next
place, test whether we're at the end, etc.  (Some cursors can go
backward, as well.  Etc.)

Cursors are fine when you need that power, but if all you want to do is
loop through the elements of a data structure, it's too low level.  The
client shouldn't have to worry about getting the next thing, and testing
for done.  The client should just say "for each item X, perform
so-and-so operations on X".  That's pretty much what the generic style
does, but the syntax is horrible, and it doesn't work in all cases.  For
example, as Jeff Carter pointed out, if the iterator wants to be a
protected operation.

Also, if you use the cursor style for iteration, it can get pretty
unreadable in complicated cases.  For example, try writing in that style
for walking a tree-structured data structure.  The generic style can use
simple recursion.  The cursor style needs to mess around with explicit
stacks and whatnot.  Similarly, layering one iterator on top of another
(like "skip all the items that match a certain condition"), is much
easier to write in the generic style.

- Bob



  parent reply	other threads:[~2003-12-19 22:47 UTC|newest]

Thread overview: 51+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-12-10 13:36 Proposed change to BC iterator parameters amado.alves
2003-12-10 16:47 ` Proposed change to BC iterator parameters [limitedness] Georg Bauhaus
2003-12-10 17:39 ` Proposed change to BC iterator parameters Martin Krischik
2003-12-10 18:22 ` Jeffrey Carter
2003-12-10 23:00   ` Robert A Duff
2003-12-11  1:00     ` Jeffrey Carter
2003-12-11 15:09       ` Robert A Duff
2003-12-11  8:33     ` Dmitry A. Kazakov
2003-12-10 20:50 ` Simon Wright
2003-12-10 23:12 ` Robert A Duff
2003-12-11  5:07   ` Steve
2003-12-11 15:24     ` Robert A Duff
2003-12-11 17:39       ` Jeffrey Carter
2003-12-12 22:22         ` Robert A Duff
2003-12-13  0:57           ` Jeffrey Carter
2003-12-17 20:59             ` Robert A Duff
2003-12-18 10:05               ` Dmitry A. Kazakov
2003-12-18 18:14                 ` Robert A Duff
2003-12-19 10:53                   ` Dmitry A. Kazakov
2003-12-19 16:17                     ` Georg Bauhaus
2003-12-19 17:19                       ` Dmitry A. Kazakov
2003-12-19 22:51                         ` Robert A Duff
2003-12-20 12:20                           ` Dmitry A. Kazakov
2003-12-19 22:47                       ` Robert A Duff [this message]
2003-12-20  2:11                         ` Stephen Leake
2003-12-20 19:08                         ` Robert I. Eachus
2003-12-21 11:39                           ` Simon Wright
2003-12-21 18:13                             ` Robert I. Eachus
2003-12-21 13:58                           ` Dmitry A. Kazakov
2003-12-22  1:25                             ` Robert I. Eachus
     [not found]         ` <916oa1-c93.ln1@beastie.ix.netcom.com>
2003-12-13 16:57           ` Simon Wright
2003-12-12  5:29     ` Simon Wright
2003-12-12 22:26       ` Robert A Duff
2003-12-13 16:55         ` Simon Wright
2003-12-13 17:27           ` Dmitry A. Kazakov
2003-12-13  2:44       ` Steve
  -- strict thread matches above, loose matches on Subject: below --
2003-12-23 10:40 amado.alves
2003-12-19 15:53 amado.alves
2003-12-19 23:05 ` Robert A Duff
2003-12-11 16:02 amado.alves
2003-12-11 15:05 ada_wizard
2003-12-11 16:45 ` Robert A Duff
2003-12-11 12:56 amado.alves
2003-12-17 20:25 ` Robert A Duff
2003-12-11 12:43 amado.alves
2003-12-11 12:33 amado.alves
2003-12-10 14:39 amado.alves
2003-12-10  5:46 Simon Wright
2003-12-10 18:12 ` Jeffrey Carter
2003-12-11 16:10   ` Martin Krischik
2003-12-10 20:59 ` Simon Wright
replies disabled

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