comp.lang.ada
 help / color / mirror / Atom feed
From: Simon Wright <simon@pushface.org>
Subject: Re: Constraints in extended return
Date: Tue, 22 Mar 2011 08:28:59 +0000
Date: 2011-03-22T08:28:59+00:00	[thread overview]
Message-ID: <m2r59zftis.fsf@pushface.org> (raw)
In-Reply-To: im8vvs$6v0$1@munin.nbi.dk

"Randy Brukardt" <randy@rrsoftware.com> writes:

> "Simon Wright" <simon@pushface.org> wrote in message 
> news:m2d3lngzmi.fsf@pushface.org...
>> This code transposes a matrix:
>>
>>   function Transpose (M : Complex_Matrix) return Complex_Matrix
>>   is
>>   begin
>>      return Result : Complex_Matrix (M'Range (2), M'Range (1)) do
>>        for J in M'Range (1) loop
>>           for K in M'Range (2) loop
>>              Result (K, J) := M (J, K);
>>           end loop;
>>        end loop;
>>      end return;
>>   end Transpose;
>>
>> This is all very well for providing a value where no constraint is
>> otherwise imposed, for example as an actual in a subprogram call, but
>> what about the case where there is a prior constraint?
>>
>>   Input : Complex_Matrix (1 .. 2, 11 .. 12);
>>   Output : Complex_Matrix (1 .. 2, 1 .. 2);
>> begin
>>   Input := (...);
>>   Output := Transpose (Input);
>>
>> Is there any way for the extended return to determine the constraints of
>> the 'target'? I suspect not, but the language in RM6.5 is deep.
>
> Why do we care what the bounds are? Assignments "slide" bounds; all that is 
> required is that the lengths of the array dimensions match. This is true 
> whether this is an extended return or a regular return (at least it had 
> better be; it would be awful to have the semantics change depending on the 
> form of the return statement).
>
> For instance,
>    Output := Input;
> is both a legal assignment and does not raise Constraint_Error (both 
> dimensions have length 2).
>
> Now, if you get the lengths wrong, you have a problem, but not the actual 
> bounds.

Thanks for that (which I can confirm works just fine with GNAT). Unable
to see the wood for the trees ...



      reply	other threads:[~2011-03-22  8:28 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-03-19 10:42 Constraints in extended return Simon Wright
2011-03-19 13:30 ` Robert A Duff
2011-03-19 13:51   ` Dmitry A. Kazakov
2011-03-19 15:55   ` Simon Wright
2011-03-22  2:02 ` Randy Brukardt
2011-03-22  8:28   ` Simon Wright [this message]
replies disabled

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