From: Niklas Holsti <niklas.holsti@tidorum.invalid>
Subject: Re: syntaxic exploration
Date: Wed, 20 Dec 2017 22:05:11 +0200
Date: 2017-12-20T22:05:11+02:00 [thread overview]
Message-ID: <f9vu3oFik7bU1@mid.individual.net> (raw)
In-Reply-To: <0d33e631-e63d-4346-ac95-5eec72127f4f@googlegroups.com>
On 17-12-20 19:28 , Mehdi Saada wrote:
> I'm being modelizing polynomes.
It is difficult to help you if you don't show the type declarations! So
my suggestions below are not sure to work.
> I've got those two things:
> p_poly_v1_g.adb:51:21: iterable name cannot be a discriminant-dependent component of a mutable object
> Ah ? So I can't write that ?
> return RESULTAT : T_POLYNOME := POLY do
> for ELEMENT of RESULTAT.COEF loop
> ELEMENT := - ELEMENT;
> end loop;
> end return;
You are trying to iterate over RESULTAT.COEF, which seems to be an array
with an index range that depends on RESULTAT.DEGRE. The error message
tells you that this is not allowed, because RESULTAT is mutable (not
constant) and therefore RESULTAT.DEGRE and thus the index range of
RESULTAT.COEF could change during the iteration. The Annotated Ada
Reference Manual gives the following rationale for this rule:
"Reason: This is the same rule that applies to renames; it serves the
same purpose of preventing the object from disappearing while the
iterator is still using it."
It should work if you change the loop to be an ordinary loop over
RESULTAT.COEF'Range, with indexing of its elements. There will then be
(at least in principle) run-time checks to ensure that the indexing is
legal even if RESULTAT has changed. In practice these checks may be
optimised away.
> I've got that too:
> p_poly_v1_g.adb:59:86: selector name should be identifier or "others"
>
> return RES: T_POLYNOME :=
> (T_DEGRE'MAX(POLY_A.DEGRE,POLY_B.DEGRE),
> POLY_A.COEF'Range => POLY_A.COEF, others => Nulle) do
Here you have omitted the '(' ')' around the nested array aggregate. It
should be
return RES: T_POLYNOME :=
(T_DEGRE'MAX(POLY_A.DEGRE,POLY_B.DEGRE),
(POLY_A.COEF'Range => POLY_A.COEF, others => Nulle)) do
> I thought X'Range was strictly equivalent to X'First..X'Last ? Of
> course, poly is a mutable article, with two components, Degre
> (derived from NATURAL), and COEF, array.
Which is why the aggregate for COEF is nested and must have its own
parentheses.
> I have that too:
> for IND in POLY_R.COEF'Range loop
> POLY_R.COEF(IND) := POLY_R.COEF(IND)*(IND+1);
> end loop;
>
> COEF's elements of T_RATIONNEL type, themselves record types.
> IND is of type T_DEGRE, so why do I have that:
> p_poly_v1_g.adb:73:43: expected type "Standard.Integer"
> p_poly_v1_g.adb:73:43: found private type "T_Rationnel"
Again hard to be sure, as you didn't show the actual type declarations,
but what is your question, really? Is it (1) why the compiler gives you
an error, or (2) why the first message says "Standard.Integer" instead
of "T_DEGRE"?
The answer to the first question is that you have not defined an "*"
operator for these operand types, or this operator is not visible at
this point in the code.
The answer to the second question is probably that the index type of the
COEF array is a subtype of Standard.Integer, not a type of its own.
GNAT's error messages of this kind refer to the underlying type, not to
the subtype, because the operator is identified from the type and not
from the subtype.
--
Niklas Holsti
Tidorum Ltd
niklas holsti tidorum fi
. @ .
next prev parent reply other threads:[~2017-12-20 20:05 UTC|newest]
Thread overview: 49+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-12-20 17:28 syntaxic exploration Mehdi Saada
2017-12-20 17:32 ` Mehdi Saada
2017-12-20 20:08 ` Niklas Holsti
2017-12-20 22:18 ` Mehdi Saada
2017-12-20 22:45 ` Mehdi Saada
2017-12-21 7:24 ` Randy Brukardt
2017-12-21 7:44 ` Niklas Holsti
2017-12-21 7:21 ` Randy Brukardt
2017-12-21 16:24 ` Jeffrey R. Carter
2017-12-22 5:01 ` Robert Eachus
2017-12-22 21:15 ` Simon Clubley
2017-12-22 22:11 ` Niklas Holsti
2017-12-22 22:51 ` Dmitry A. Kazakov
2017-12-23 7:15 ` Niklas Holsti
2017-12-23 16:23 ` Jeffrey R. Carter
2017-12-24 3:37 ` Robert Eachus
2017-12-24 13:39 ` Niklas Holsti
2017-12-24 13:32 ` Niklas Holsti
2017-12-25 13:40 ` Jeffrey R. Carter
2017-12-25 14:42 ` Mehdi Saada
2017-12-25 17:03 ` Dmitry A. Kazakov
2017-12-25 18:27 ` Niklas Holsti
2017-12-25 20:12 ` Jacob Sparre Andersen
2017-12-20 20:05 ` Niklas Holsti [this message]
2017-12-20 22:48 ` Mehdi Saada
2017-12-20 23:39 ` Mehdi Saada
2017-12-21 0:35 ` Mehdi Saada
2017-12-21 7:18 ` Randy Brukardt
2017-12-21 19:23 ` G. B.
2017-12-21 23:46 ` bj.mooremr
2017-12-22 23:45 ` Randy Brukardt
2017-12-22 13:31 ` Mehdi Saada
2017-12-22 18:00 ` Mehdi Saada
2017-12-22 18:27 ` Niklas Holsti
2017-12-22 20:25 ` Mehdi Saada
2017-12-22 22:33 ` Niklas Holsti
2017-12-23 1:47 ` Mehdi Saada
2017-12-23 7:17 ` Niklas Holsti
2017-12-23 11:23 ` Mehdi Saada
2017-12-23 11:39 ` Mehdi Saada
2017-12-23 12:09 ` Niklas Holsti
2017-12-23 12:12 ` Mehdi Saada
2017-12-23 12:16 ` Mehdi Saada
2017-12-23 13:04 ` Niklas Holsti
2017-12-23 14:02 ` Mehdi Saada
2017-12-23 14:46 ` Mehdi Saada
2017-12-23 15:03 ` Mehdi Saada
2017-12-23 22:11 ` Niklas Holsti
2017-12-24 0:55 ` Mehdi Saada
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox