From: Jean-Pierre Rosen <rosen@adalog.fr>
Subject: Re: Surprise in array concatenation
Date: Thu, 01 Sep 2005 10:48:19 +0200
Date: 2005-09-01T10:48:19+02:00 [thread overview]
Message-ID: <f8f6fd.eur.ln@hunter.axlog.fr> (raw)
In-Reply-To: <1125544603.561847.32140@g47g2000cwa.googlegroups.com>
Gene a �crit :
> Seldom am I surprised by Ada semantics, but today they got me.
>
> type Int_List_Type is array(Integer range <>) of Integer;
>
> procedure Main is
>
> function F(a : Int_List_Type) return Integer is
> i : Integer;
> begin
> if a'Length <= 1 then
> return a(1);
> else
> -- calculate i s.t. 1 <= i <= a'Last
> -- with some algorithm; details irrelevant
> ...
> return F(a(1..i - 1) & a(i + 1, a'Last));
> end if;
> end Calculate;
>
> a : Int_List(1..100);
>
> begin
> -- yada yada; fill a with values
> Put(Calculate(F(a)));
> end;
>
> The gotcha is that when (and only when) i is determined to be zero, the
> concatenation in the recursive call to F produces a starting index of 2
> rather than 1. Of course this causes the base case test to raise an
> exception in the next recursive call. This is in accordance with the
> ALRM and GNAT implements it perfectly.
>
> Yes I know how to recode this to use a'First instead of 1 as needed.
>
> Nonetheless the rule seems silly: When a leading zero-length array is
> catenated to another array the result takes on the starting index of
> the _second_ operand. This doesn't make sense to me. Why not use the
> starting index of the zero-length array?
>
Because the lower bound of a null array needs not belong to the subtype
used for indexing.
Note that you can force the lower bound by subtype conversion:
declare
Result : constant string := F(a(1..i - 1) & a(i + 1, a'Last));
subtype Force_Lower_To_1 is string (1 .. Result'length);
begin
return Force_Lower_To_1 (Result);
end;
--
---------------------------------------------------------
J-P. Rosen (rosen@adalog.fr)
Visit Adalog's web site at http://www.adalog.fr
next prev parent reply other threads:[~2005-09-01 8:48 UTC|newest]
Thread overview: 108+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-09-01 3:16 Surprise in array concatenation Gene
2005-09-01 7:55 ` Dmitry A. Kazakov
2005-09-01 8:02 ` Florian Weimer
2005-09-01 11:48 ` Georg Bauhaus
2005-09-01 12:02 ` Lutz Donnerhacke
2005-09-01 13:01 ` Georg Bauhaus
2005-09-01 15:54 ` Florian Weimer
2005-09-01 16:09 ` Robert A Duff
2005-09-05 8:38 ` Jean-Pierre Rosen
2005-09-05 23:52 ` Robert A Duff
2005-09-06 9:03 ` Jean-Pierre Rosen
2005-09-07 17:57 ` adaworks
2005-09-07 20:01 ` Robert A Duff
2005-09-08 8:08 ` Jacob Sparre Andersen
2005-09-07 22:46 ` Jeffrey Carter
2005-09-08 4:43 ` Simon Wright
2005-09-08 10:36 ` Georg Bauhaus
2005-09-08 13:47 ` Ed Falis
2005-09-08 17:03 ` Pascal Obry
2005-09-08 16:45 ` Jeffrey Carter
2005-09-08 19:37 ` Simon Wright
2005-09-08 6:32 ` adaworks
2005-09-08 9:09 ` Jean-Pierre Rosen
2005-09-08 16:56 ` Jeffrey Carter
2005-09-09 14:04 ` Bob Spooner
2005-09-09 16:17 ` adaworks
2005-09-23 23:04 ` Randy Brukardt
2005-09-14 8:57 ` Ole-Hjalmar Kristensen
2005-09-23 23:09 ` Randy Brukardt
2005-09-24 10:49 ` Larry Kilgallen
2005-09-24 20:27 ` Lurker
2005-09-25 0:20 ` Robert A Duff
2005-09-25 17:05 ` adaworks
2005-09-01 11:42 ` Georg Bauhaus
2005-09-01 13:59 ` Dmitry A. Kazakov
2005-09-01 15:36 ` Georg Bauhaus
2005-09-01 18:34 ` Dmitry A. Kazakov
2005-09-02 10:43 ` Georg Bauhaus
2005-09-02 13:11 ` Dmitry A. Kazakov
2005-09-02 14:23 ` Georg Bauhaus
2005-09-02 19:48 ` Dmitry A. Kazakov
2005-09-02 17:21 ` Björn Persson
2005-09-01 16:04 ` Robert A Duff
2005-09-01 18:06 ` Dmitry A. Kazakov
2005-09-02 10:42 ` Georg Bauhaus
2005-09-02 13:20 ` Dmitry A. Kazakov
2005-09-02 14:14 ` Georg Bauhaus
2005-09-02 19:48 ` Dmitry A. Kazakov
2005-09-03 20:01 ` Georg Bauhaus
2005-09-04 10:13 ` Dmitry A. Kazakov
2005-09-05 13:22 ` Georg Bauhaus
2005-09-05 15:50 ` Dmitry A. Kazakov
2005-09-05 18:20 ` Georg Bauhaus
2005-09-05 18:31 ` Georg Bauhaus
2005-09-06 8:20 ` Dmitry A. Kazakov
2005-09-06 11:52 ` Georg Bauhaus
2005-09-06 13:46 ` Dmitry A. Kazakov
2005-09-06 15:51 ` Georg Bauhaus
2005-09-06 21:32 ` Robert A Duff
2005-09-07 9:08 ` Dmitry A. Kazakov
2005-09-07 18:20 ` Georg Bauhaus
2005-09-07 19:07 ` Georg Bauhaus
2005-09-07 21:23 ` Dmitry A. Kazakov
2005-09-08 10:27 ` Georg Bauhaus
2005-09-08 11:39 ` Georg Bauhaus
2005-09-08 13:44 ` Dmitry A. Kazakov
2005-09-08 18:18 ` Georg Bauhaus
2005-09-09 10:06 ` Dmitry A. Kazakov
2005-09-09 12:26 ` Georg Bauhaus
2005-09-09 12:29 ` Georg Bauhaus
2005-09-01 8:48 ` Jean-Pierre Rosen [this message]
2005-09-01 15:57 ` Robert A Duff
2005-09-01 21:42 ` Gene
2005-09-01 22:56 ` tmoran
2005-09-05 15:53 ` Gene
2005-09-05 17:47 ` jimmaureenrogers
2005-09-05 22:13 ` Robert A Duff
2005-09-06 8:24 ` Dmitry A. Kazakov
2005-09-05 19:22 ` Jeffrey R. Carter
2005-09-05 21:54 ` Robert A Duff
2005-09-05 22:50 ` Larry Kilgallen
2005-09-05 23:46 ` Robert A Duff
2005-09-12 3:59 ` Dave Thompson
2005-09-06 16:02 ` Jeffrey Carter
2005-09-06 21:00 ` Robert A Duff
2005-09-06 5:38 ` Pascal Obry
2005-09-05 21:48 ` Robert A Duff
2005-09-06 5:25 ` tmoran
2005-09-06 14:58 ` Robert A Duff
2005-09-06 9:26 ` Georg Bauhaus
2005-09-06 15:00 ` Robert A Duff
2005-09-07 11:02 ` Thierry Pirot
2005-09-07 20:09 ` Robert A Duff
2005-09-06 13:22 ` Bob Spooner
2005-09-06 15:30 ` Robert A Duff
2005-09-06 16:12 ` Jeffrey Carter
2005-09-06 21:21 ` Robert A Duff
2005-09-02 20:19 ` Jeffrey R. Carter
2005-09-03 12:51 ` Dr. Adrian Wrigley
2005-09-03 14:08 ` Jacob Sparre Andersen
2005-09-05 8:34 ` Jean-Pierre Rosen
2005-09-05 9:32 ` Arrays indexed by fixed point types (Was: Surprise in array concatenation) Jacob Sparre Andersen
2005-09-05 11:07 ` Jean-Pierre Rosen
2005-09-05 15:12 ` Dr. Adrian Wrigley
2005-09-05 12:14 ` Dmitry A. Kazakov
2005-09-05 13:07 ` Jacob Sparre Andersen
2005-09-05 15:10 ` Dmitry A. Kazakov
2005-09-05 11:29 ` Surprise in array concatenation Dr. Adrian Wrigley
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox