From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-0.3 required=5.0 tests=BAYES_00, REPLYTO_WITHOUT_TO_CC autolearn=no autolearn_force=no version=3.4.4 X-Google-Thread: a07f3367d7,9f99a33281d5072c X-Google-Attributes: gida07f3367d7,public,usenet X-Google-NewGroupId: yes X-Google-Language: ENGLISH,ASCII Path: g2news1.google.com!news3.google.com!feeder.news-service.com!newsfeed.straub-nv.de!open-news-network.org!noris.net!news.teledata-fn.de!newsfeed.arcor.de!newsspool4.arcor-online.net!news.arcor.de.POSTED!not-for-mail From: "Dmitry A. Kazakov" Subject: Re: When a conditional expression is static, where can it be used? Newsgroups: comp.lang.ada User-Agent: 40tude_Dialog/2.0.15.1 MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 8bit Reply-To: mailbox@dmitry-kazakov.de Organization: cbb software GmbH References: <4c2b1ecb$0$7670$9b4e6d93@newsspool1.arcor-online.net> <555e3a37-c709-4b9b-995a-907da862d4b7@m40g2000prc.googlegroups.com> <12ok8wnj6k4sw$.ravumwbhfb1h$.dlg@40tude.net> Date: Wed, 30 Jun 2010 22:00:46 +0200 Message-ID: <1nwqh57og805t.1tih31ltv91dp$.dlg@40tude.net> NNTP-Posting-Date: 30 Jun 2010 22:00:43 CEST NNTP-Posting-Host: e220b896.newsspool2.arcor-online.net X-Trace: DXC=B@ngA^0SV3ak:Fl[lCiFD^bNia X-Complaints-To: usenet-abuse@arcor.de Xref: g2news1.google.com comp.lang.ada:12054 Date: 2010-06-30T22:00:43+02:00 List-Id: On Wed, 30 Jun 2010 12:12:17 -0700 (PDT), Adam Beneschan wrote: > On Jun 30, 10:35�am, "Dmitry A. Kazakov" > wrote: >> On Wed, 30 Jun 2010 07:39:24 -0700 (PDT), Adam Beneschan wrote: >>> On Jun 30, 3:39 am, Georg Bauhaus >>> wrote: >>>> A totally meaningless example just to illustrate >>>> the question: What is it that a compiler must report >>>> for the case statement below, if anything? >> >>> The choice "Sa" is not covered by any alternative. �Other than that, I >>> don't think there's anything wrong with the CASE statement, and if you >>> had included a "when others =>" alternative I think it would be >>> legal. �I'm not sure what potential problem you were trying to >>> illustrate. >> >> Let me propose this one instead: >> >> � type DOW is (Mo, Tu, We, Th, Fr, Sa, So); >> >> � case D is >> � when (if D = Mo then Tu else Mo) => P; >> � when (if D = Tu then Tu else Mo) => Q; >> � when We..So => R; >> � end case; >> >> The above is equivalent to: >> >> � case D is >> � when Tu => P; >> � when Mo => Q; >> � when We..So => R; >> � end case; >> >> But as Pascal suggested, it should not compile because D is not static. > > Ummm, not quite, because (1) Pascal didn't say anything about *why* he > thought it shouldn't compile (his entire statement was "This should > not compile I would say"), and (2) in the OP's original example, D > *is* static. In your example, you're right that it shouldn't compile > because D is not static, but that's a different issue. (Well, I > *assume* D isn't static. Since your example doesn't include a > declaration of D, I can't tell.) So, if D is static, then all choices are defined and do not overlap, hence it must compile. Right? >> As for the problem Georg had in mid. Maybe it is this. Let you have some >> function, say Gamma function. Now, >> >> � �x : constant := 0.1; >> � �Gx : constant := Gamma (1.1); -- Illegal, what a pity >> >> Let us open the table of Gamma, scan it, and write something like: >> >> � �(if x < 0.0 then ... elsif x < 0.01 then ... ) >> >> This wonderful static function can then copied and pasted everywhere you >> wanted to evaluate Gamma at compile time. Is it legal? > > Gamma cannot be a static function (4.9(18-22)). You cannot write a > static function (other than an enumeration literal, which is > technically a static function). Now I do not understand you. The expression I gave is an if-operator with only constants in it. I presume it is static. E.g., simplified: � �x : constant := 2.0; � �Gx : constant := (if x <= 1.0 then 1.0 elsif x <= 2.0 then 2.0 elsif x <= 6.0 then 9.0 else 24.0); We could even add linear or quadratic interpolation between the points. -- Regards, Dmitry A. Kazakov http://www.dmitry-kazakov.de