comp.lang.ada
 help / color / mirror / Atom feed
From: Matt Borchers <mattborchers@gmail.com>
Subject: Re: array from static predicate on enumerated type
Date: Wed, 17 Mar 2021 18:04:05 -0700 (PDT)	[thread overview]
Message-ID: <7e1f3203-0fe9-428e-a8ac-411f432dca49n@googlegroups.com> (raw)
In-Reply-To: <08b15573-0197-4b6e-9411-d0ca0f627f62n@googlegroups.com>

On Wednesday, March 17, 2021 at 4:41:17 PM UTC-4, Shark8 wrote:

> Because it's undefined, and the operations prohibited. 
> You're jumping from "Let's have a continuous function" to "we can define division by zero as something useful." 
> And you can... but not automatically, and when someone brings up the function F(x) = 1/x and says "well, we have to resolve this issue, as the limit to zero comes from negative it becomes -Infinity, but from positive it becomes positive Infinity." 

This sounds like a strawman argument.  You're saying it can't work because it doesn't work.  I have a valid 1 to 1 mapping of values and that is the purest definition of a function.  It is up to the programmer to define what the mapping is.  Static_Predicate is only defining the list of valid inputs (and the order) to whatever I choose my mapping implementation to be.  A programmatic function does not need to be continuous and nor can it be when it is defined on an enumerated type.  The parent enumeration has an order specified in the program text and the sub-type also has an order.

> The same thing is happening here: you're saying that 'pos, 'succ, etc could be defined -- and that's true -- but you're ignoring the underlying problems. 
> Having something like "P : Constant Array (Primes) of Natural;" could indeed be useful, but what would P(12) be? If Primes'Succ(11) = 13, then what is Primes'Pred(2)? [This latter is a good example because in String manipulation, the 0 value is used for indicating things like "not-found", and we absolutely can say SUBTYPE INDEXER IS VALUE'First..INDEX(VALUE, "NOEXIST"); and have it be sensible when INDEXER is the null-range.]

Assuming,
subtype Primes is Natural with Static_Predicate Primes in 2|3|5|7|9|11|13...;
P : Constant Array (Primes) of Natural;

What I would expect is that P(12) would be an illegal access because 12 is not a valid value of Primes thus cannot be an index and a constraint error or out-of-range error would be thrown.  Wouldn't this just involve the compiler to insert "if x not in primes then raise..." if constraint checking is enabled?  Otherwise you have an erroneous program.  Similarly, Primes'Succ(12) is also illegal.  Primes'Pred(2) also illegal because there is no prime before 2 so presumably you have defined your Static_Predicate to enumerate the primes with 2 listed first.  A similar illegal invocation would be a function F defined with an argument for Primes, like "function F( p : Primes ) return Natural is" and you called F(12).

Regards,
Matt

  reply	other threads:[~2021-03-18  1:04 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-03-12 20:49 array from static predicate on enumerated type Matt Borchers
2021-03-12 21:22 ` Egil H H
2021-03-12 22:16 ` Jeffrey R. Carter
2021-03-12 22:41 ` Dmitry A. Kazakov
2021-03-13  2:06   ` Matt Borchers
2021-03-13  4:55     ` Randy Brukardt
2021-03-15 14:16       ` Matt Borchers
2021-03-15 17:53         ` Shark8
2021-03-16  6:58         ` Randy Brukardt
2021-03-13  8:04     ` Dmitry A. Kazakov
2021-03-15 14:11       ` Matt Borchers
2021-03-15 17:48         ` Shark8
2021-03-15 20:25           ` Dmitry A. Kazakov
2021-03-16 13:27             ` Shark8
2021-03-16 14:25               ` Dmitry A. Kazakov
2021-03-17  4:05                 ` Matt Borchers
2021-03-17  7:08                   ` Dmitry A. Kazakov
2021-03-17 18:44                     ` Matt Borchers
2021-03-17 19:41                       ` Dmitry A. Kazakov
2021-03-18  1:30                         ` Matt Borchers
2021-03-18  8:20                           ` Dmitry A. Kazakov
2021-03-19  0:10                             ` Matt Borchers
2021-03-19  8:00                               ` Dmitry A. Kazakov
2021-03-18 10:15                           ` Niklas Holsti
2021-03-18 10:47                             ` AdaMagica
2021-03-18 11:26                               ` Dmitry A. Kazakov
2021-03-19  0:34                             ` Matt Borchers
2021-03-19  0:49                               ` Jeffrey R. Carter
2021-03-23  1:07                                 ` Matt Borchers
2021-03-23  3:43                                   ` Randy Brukardt
2021-03-22 19:09                               ` Niklas Holsti
2021-03-17 15:08                   ` Shark8
2021-03-17 19:08                     ` Matt Borchers
2021-03-17 20:41                       ` Shark8
2021-03-18  1:04                         ` Matt Borchers [this message]
2021-03-18 14:25                           ` Shark8
2021-03-18 23:36                             ` Matt Borchers
2022-03-16  0:38             ` Thomas
replies disabled

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