comp.lang.ada
 help / color / mirror / Atom feed
From: "James Giles" <jamesgiles@worldnet.att.net>
Subject: Re: Shortcut logicals (was: Re: F200x )
Date: Tue, 01 Feb 2005 01:43:42 GMT
Date: 2005-02-01T01:43:42+00:00	[thread overview]
Message-ID: <i9BLd.316$xR1.179@bgtnsc04-news.ops.worldnet.att.net> (raw)
In-Reply-To: OtidnVAKUaPWT2PcRVn-ig@comcast.com

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain, Size: 3878 bytes --]

James Van Buskirk wrote:
> "James Giles" <jamesgiles@worldnet.att.net> wrote in message
> news:mXzLd.100$xR1.94@bgtnsc04-news.ops.worldnet.att.net...
>
>> Well, I have the F2003 FCD open right now, in �7.4.3 Masked array
>> assignment - WHERE.  So, perhaps you can point out what part of
>> it resolves the issue I raised:
>
>>    cond1 .and. cond2 .andthen. cond3 .and. cond4
>
>> Is COND4 permitted to be evaluated or not?  I don't see that
>> WHERE tells me.  It has a concept of "pending control" which
>> I see can be applied on nested constructs, but in the above
>> expression, not of the terms actually present are part of any
>> "pending" condition.  Or, are you talking about some other
>> aspect of WHERE entirely?
>
> OK, I have added comp.lang.ada, so hopefully someone there
> can answer the question about the effect of precedence on
> your snippet, and also discuss the ergonomics of Ada short-
> circuiting logical operators, or whatever they call them.
>
> I would answer your question above, assuming cond1 .AND. cond2
> evaluate to scaler .FALSE._lk to be that it all depends; either
> cond3 or cond4 or neither or both could be 'short-circuited'.

But, that's just the problem.  The whole purpose of the separate
short-circuit operators is to eliminate ambiguities about whether
a given condition is evaluated.  That allows the programmer
to prevent evaluation of conditions if such evaluation would cause
exceptions or program termination.

Merely saying "it depends" doesn't help.  But, making a different
rule - that the new operators are lower precedence than the non-shortcut
ones, for example - does help.  That makes the example unambiguous.

The standard permits logical operators (and their operands) to be
evaluated in any order that produces a logically equivalent result.
Presumably that would be changed with respect to the shortcut
operators to require the right operand be evaluated conditionally
based on the value of the left.  In the example in question, assuming
that the operators all have the same precedence, the actual order
of evaluation might be pretty much anything.  COND1, COND2,
and COND4 might all be ecaluated before any of the operators
are done at all.  So, the expression might be as if it were rewritten
as either of (as well as others):

       cond4 .and. cond1 .and. cond2 .andthen. cond3
       cond2 .andthen. cond3 .and. cond4 .and. cond1

In fact, the only requires order (as far as I can tell) is that COND3
can't be evaluated before COND2 is found to be .true.  (If COND2
is array valued, the elements of COND3 corresponding to those
elements of COND2 that were .true. would also *may* have to be
evaluated.  I can see that in this case only an analogy to how WHERE
works is appropriate.) But this is the same result as if the shortcut
operator had lower precedence than the non-shortcut operator.

Now consider:

   cond1 .or. cond2 .andthen. cond3 .or. cond4

Even given that .andthen. has higher precedence than .or., the
rules of Fortran still suggest that COND1, COND2, and COND3
might all be evaluated before the .andthen. operator is executed.
After all, reordering the .or. operator is still permitted.  Both the
following are allowed interpretations as well as others):

   cond4 .or. cond1 .or. cond2 .andthen. cond3
   cond2 .andthen. cond3 .or. cond4 .or. cond1

Now, not only do I find this confusing, I'm sure it will hide latent
errors in the code of others.  Requiring parentheses or using a
function-call notation eliminates all ambiguities.  Making the new
operators lower precedence than everything else helps a little.

-- 
J. Giles

"I conclude that there are two ways of constructing a software
design: One way is to make it so simple that there are obviously
no deficiencies and the other way is to make it so complicated
that there are no obvious deficiencies."   --  C. A. R. Hoare





  parent reply	other threads:[~2005-02-01  1:43 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <41f94cab$1@news1.ethz.ch>
     [not found] ` <INfKd.13707$bh6.378409@weber.videotron.net>
     [not found]   ` <nospam-6F7AE0.11340228012005@news.supernews.com>
     [not found]     ` <lqjnv01969glk2mbv1plvjdn5idkb1c3db@4ax.com>
     [not found]       ` <1107060103.157135.325010@z14g2000cwz.googlegroups.com>
     [not found]         ` <8u2pv0tdd9b1v689rtqc2c2tlm9pn9t1t6@4ax.com>
     [not found]           ` <1107085125.849687.318060@c13g2000cwb.googlegroups.com>
     [not found]             ` <1107096062.786125.100030@f14g2000cwb.googlegroups.com>
     [not found]               ` <10vq094k09igv3c@corp.supernews.com>
     [not found]                 ` <eudLd.43724$8u5.37685@bgtnsc04-news.ops.worldnet.att.net>
     [not found]                   ` <1107160100.162171.223490@f14g2000cwb.googlegroups.com>
     [not found]                     ` <cTxLd.126318$w62.46060@bgtnsc05-news.ops.worldnet.att.net>
     [not found]                       ` <xfKdnUflrtW3I2PcRVn-og@comcast.com>
     [not found]                         ` <rEzLd.68$xR1.54@bgtnsc04-news.ops.worldnet.att.net>
     [not found]                           ` <ON-dnSQzGfXOVWPcRVn-1A@comcast.com>
     [not found]                             ` <mXzLd.100$xR1.94@bgtnsc04-news.ops.worldnet.att.net>
2005-02-01  0:56                               ` Shortcut logicals (was: Re: F200x ) James Van Buskirk
2005-02-01  1:16                                 ` Robert A Duff
2005-02-01  6:49                                   ` Shortcut logicals Martin Dowie
2005-02-01 13:46                                     ` Robert A Duff
2005-02-01  8:08                                   ` Shortcut logicals (was: Re: F200x ) Martin Krischik
2005-02-01  1:43                                 ` James Giles [this message]
2005-02-01  2:33                                   ` James Van Buskirk
2005-02-01  2:53                                     ` James Giles
2005-02-01  3:49                                       ` James Van Buskirk
2005-02-01  4:31                                         ` James Giles
2005-02-01  8:49 Christoph Grein
2005-02-01 11:43 ` Martin Krischik
2005-02-01 12:45   ` Adrien Plisson
2005-02-01 14:03     ` Martin Krischik
2005-02-01 14:56       ` Les
2005-02-01 16:57       ` Frank J. Lhota
2005-02-01 17:55       ` Dan Nagle
2005-02-01 18:25         ` James Giles
2005-02-01 13:57   ` Robert A Duff
replies disabled

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