comp.lang.ada
 help / color / mirror / Atom feed
From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: Rational for not making cursor tagged in Containers
Date: Mon, 23 Apr 2007 21:18:30 +0200
Date: 2007-04-23T21:18:26+02:00	[thread overview]
Message-ID: <y8trvxn2infn.1sxko1eegl1xj$.dlg@40tude.net> (raw)
In-Reply-To: 1177349886.343834.295210@q75g2000hsh.googlegroups.com

On 23 Apr 2007 10:38:06 -0700, Adam Beneschan wrote:

> On Apr 20, 3:14 pm, "Dmitry A. Kazakov" <mail...@dmitry-kazakov.de>
> wrote:
> 
>>> But please explain what use is a Boolean with discriminants.
>>> I'm not sure...
>>
>>    type GUI_Boolean (Defined : Boolean := True) is (False, True);
>>
>> When Defined = False, the value is rendered as blank and the user is forced
>> to enter it before it closes the dialog box.
> 
> X, Y : GUI_Boolean;
> 
> If you say X = Y, does it compare just the values, or does it compare
> the discriminants also?

That depends on how equality operation were defined for the given type. In
the concrete case of GUI_Boolean, the user-defined "=" would raise
Constraint_Error if at least one of the discriminants is false. There will
be probably another private equivalence defined for the containers of
GUI_Boolean.

> If it compares the discriminants, what do you write when you want to
> compare just the values, without caring what the discriminants happen
> to be?

It is the programmer's business to define correct "=". Ada has no
responsibility to generate semantically correct equality.

> What does "X = True" mean?  Does X.Defined have any effect on the
> value of this expression?
> 
> OK, X is a GUI_Boolean that has Defined=false.  You now want to create
> Y to be a GUI_Boolean that has the same value as X but Defined=true.

This is semantically wrong for GUI_Boolean. An undefined value has no
defined value...

> How do you write that, given that Ada does not let you put a
> discriminant on the left side of an assignment?

How do you change Float'Fraction of a Float X keeping the value of X same?
How do you change X'Length without changing the value of X?
Why should I write such things?

> There are lots of syntactic and semantic issues involved with sticking
> a discriminant on a scalar that you probably haven't thought through.

All these problems were solved for the type String. In general, the
problems you have referred equally apply to attributes of values. Ada has
lots of attributes of values, whether scalar or not. That never was a
problem.

> I agree with Randy---that way lies madness, or at the very least a
> severe migraine.  Thank you, but I think I'll stick to
> 
>     type My_Boolean_Value is (False, True);
>     type GUI_Boolean (Defined : Boolean := True) is record
>         Val : My_Boolean_Value;
>     end record;
> 
> At least I know what I'm doing if I use this type.  If X is a
> GUI_Boolean, then X refers to the whole record and X.Val refers to
> just the value.  Nice, simple, easy to understand.

To have a public discriminant has nothing to do with being implemented as a
record. And reverse.

-- 
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de



  reply	other threads:[~2007-04-23 19:18 UTC|newest]

Thread overview: 66+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-04-19 16:05 Rational for not making cursor tagged in Containers Anh Vo
2007-04-19 18:25 ` Robert A Duff
2007-04-19 19:28   ` Anh Vo
2007-04-19 20:45     ` Robert A Duff
2007-04-19 21:43       ` Dmitry A. Kazakov
2007-04-19 23:59         ` Ray Blaak
2007-04-20  7:54           ` Dmitry A. Kazakov
2007-04-20 10:56             ` Georg Bauhaus
2007-04-20 10:39               ` Dmitry A. Kazakov
2007-04-20 14:42                 ` Georg Bauhaus
2007-04-20 14:45                   ` Georg Bauhaus
2007-04-20 15:13                   ` Dmitry A. Kazakov
2007-04-20 19:37                     ` Georg Bauhaus
2007-04-20 19:32                       ` Dmitry A. Kazakov
2007-04-20 20:59                         ` Robert A Duff
2007-04-20 22:14                           ` Dmitry A. Kazakov
2007-04-23 17:38                             ` Adam Beneschan
2007-04-23 19:18                               ` Dmitry A. Kazakov [this message]
2007-04-24  0:15                                 ` Adam Beneschan
2007-04-24 10:43                                   ` Dmitry A. Kazakov
2007-04-24 16:27                                     ` Adam Beneschan
2007-04-24 20:19                                       ` Dmitry A. Kazakov
2007-04-26  0:58                                         ` Adam Beneschan
2007-04-26  7:50                                           ` Dmitry A. Kazakov
2007-04-26  8:09                                             ` Markus E Leypold
2007-04-27  8:46                                               ` Dmitry A. Kazakov
2007-04-27 11:37                                                 ` Markus E Leypold
2007-04-28 17:35                                                   ` Dmitry A. Kazakov
2007-04-29  2:31                                                     ` Randy Brukardt
2007-04-29  8:45                                                       ` Dmitry A. Kazakov
2007-04-27 20:44                                               ` Robert A Duff
2007-04-26  8:33                                             ` Markus E Leypold
2007-04-26 11:09                                               ` Markus E Leypold
2007-04-20 19:55                       ` Randy Brukardt
2007-04-22  9:54                         ` Georg Bauhaus
2007-04-22 11:19                           ` Dmitry A. Kazakov
2007-04-20 20:44                       ` Robert A Duff
2007-04-21  5:38                         ` Randy Brukardt
2007-04-22  1:14                           ` Robert A Duff
2007-04-22  4:08                             ` Randy Brukardt
2007-04-20 20:11                     ` Randy Brukardt
2007-04-20 21:28                       ` Dmitry A. Kazakov
2007-04-21  5:33                         ` Randy Brukardt
2007-04-21  9:39                           ` Dmitry A. Kazakov
2007-04-22  4:28                             ` Randy Brukardt
2007-04-22  8:38                               ` Dmitry A. Kazakov
2007-04-23 23:26                                 ` Randy Brukardt
2007-04-24 10:43                                   ` Dmitry A. Kazakov
2007-04-24  8:58                                 ` Georg Bauhaus
2007-04-24 12:21                                   ` Dmitry A. Kazakov
2007-04-21  4:48                       ` unifying arrays and records (was Re: Rational for not making cursor tagged in Containers) Ray Blaak
2007-04-20 17:05             ` Rational for not making cursor tagged in Containers Ray Blaak
2007-04-20 18:46               ` Dmitry A. Kazakov
2007-04-20 18:52                 ` Ray Blaak
2007-04-20 19:54                   ` Robert A Duff
2007-04-20  1:18         ` Anh Vo
2007-04-20  7:53           ` Dmitry A. Kazakov
2007-04-20  9:26             ` Maciej Sobczak
2007-04-20 10:15               ` Dmitry A. Kazakov
2007-04-20 11:59           ` Jean-Pierre Rosen
2007-04-20 13:23             ` Anh Vo
2007-04-20 16:02               ` Jean-Pierre Rosen
2007-04-21  2:53                 ` Anh Vo
2007-04-20  3:03   ` Randy Brukardt
2007-04-20  2:53 ` Randy Brukardt
2007-04-20 16:08   ` Anh Vo
replies disabled

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