comp.lang.ada
 help / color / mirror / Atom feed
From: Robert A Duff <bobduff@shell01.TheWorld.com>
Subject: Re: Shortcut logicals (was: Re: F200x )
Date: 31 Jan 2005 20:16:11 -0500
Date: 2005-01-31T20:16:11-05:00	[thread overview]
Message-ID: <wcc651dnkpw.fsf@shell01.TheWorld.com> (raw)
In-Reply-To: OtidnVAKUaPWT2PcRVn-ig@comcast.com

"James Van Buskirk" <not_valid@comcast.net> writes:

> "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.

Sorry, I've no idea what the Fortran rules are.

In Ada, the above expression is syntactically illegal -- compile time
error.  You can write:

    (cond1 and cond2) and then (cond3 and cond4)

or:

    ((cond1 and cond2) and then cond3) and cond4)

for example.

"and" is just a function call.  If you say "X and Y" then X and Y are
both evaluated (in either order) and passed to the "and" function.  The
predefined version of "and" returns True if both are True.  But "and
then" is a short-circuit control form: if you say "X and then Y", X is
evaluated first, and if it's True, you're done.  Otherwise (X is False)
Y is evaluated.

And the syntax rules forbid mixing "and" and "and then" -- you have to
use parens.  All of these ("and", "and then", "or", "or else", "xor")
are lower precedence than most other operators in Ada.  So you can
write:

    A <= B and B <= C

which means the same as:

    (A <= B) and (B <= C)

The point of "and then" is so you can write things like:

    Y /= 0 and then X/Y < 10

where X/Y makes no sense if Y is zero.

- Bob



  reply	other threads:[~2005-02-01  1:16 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 [this message]
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
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