From: "Randy Brukardt" <randy@rrsoftware.com>
Subject: Re: Constraints in extended return
Date: Mon, 21 Mar 2011 21:02:32 -0500
Date: 2011-03-21T21:02:32-05:00 [thread overview]
Message-ID: <im8vvs$6v0$1@munin.nbi.dk> (raw)
In-Reply-To: m2d3lngzmi.fsf@pushface.org
"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.
Randy.
next prev parent reply other threads:[~2011-03-22 2:02 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 [this message]
2011-03-22 8:28 ` 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