# Re: [R] figure out whether 1 is between two numbers

From: Ted Harding <Ted.Harding_at_nessie.mcc.ac.uk>
Date: Sun 19 Feb 2006 - 01:39:52 EST

On 18-Feb-06 Duncan Murdoch wrote:
> On 2/18/2006 1:13 AM, Robert W. Baer, Ph.D. wrote:

```>> Try:
>> (X>1 & Y<1) | (X<1 & Y>1)
```

>
> This is a minor stylistic suggestion: when translating the mathematical
> expression (a < b < c), write it as (a < b) & (b < c). It has no
> effect
> on the outcome, but keeping the inequalities in the same direction
> makes
> the meaning more obvious.
>
> If you do this, your expression becomes
>
> (Y<1 & 1<X) | (X<1 & 1<Y)
>
> and it's clear at a glance what's going on.
>
> I think I originally read this suggestion in something written by
> Kernighan and/or Plauger, I can't claim credit for it.
>
> Duncan Murdoch

Mention of "Kernighan and/or Plauger" got me digging out K & P "The Elements of Programming Style" (from 1974/78). The suggestion is indeed in there, on pp 20-21, leading up to the rule "Use the 'telephone test' for readability" ("If someone could understand your code when read aloud over the telephone, it's clear enough. If not, then it needs rewriting.")

The example is:

Consider the sequence

6 IF(X1.GE.ARRAY(I)) GO TO 2
IF(ARRAY(I).LT.X2) ICOUNT=ICOUNT+1     2 ...

It takes a while to realize that IVOUNT is incremented only   if ARRAY(I) lies between X1 and X2. .... Rewriting gives:

6 IF(ARRAY(I).GT.X1 .AND. ARRAY(I).LT.X2) ICOUNT = ICOUNT + 1 (Though I think it could be improved still further by the slight change to "X1.LT.ARRAY(I)" to bring it into line with Duncan's example).

Best wishes,
Ted.

E-Mail: (Ted Harding) <Ted.Harding@nessie.mcc.ac.uk> Fax-to-email: +44 (0)870 094 0861
```Date: 18-Feb-06                                       Time: 14:39:50
------------------------------ XFMail ------------------------------

______________________________________________
```
R-help@stat.math.ethz.ch mailing list