All the program we've seen so far have been pretty predictable  they went straight through doing all the instructions, & then maybe went back to the beginning again. This is not all that useful. In practice the computer would be expected to make decisions & act accordingly; it does this using the IF statement.
Clear the computer (using NEW), & type in & run this terribly amusing little program:
10 PRINT "SHALL I TELL YOU A JOKE?"
20 INPUT A$
30 IF A$="GET LOST" THEN GOTO 200
40 PRINT "HOW MANY LEGS HAS A HORSE GOT?"
50 INPUT LEGS
60 IF LEGS=6 THEN GOTO 100
70 PRINT "NO, 6, FORE LEGS IN FRONT","AND TWO BEHIND."
80 STOP
100 PRINT "YES",,"SHALL I TELL YOU IT AGAIN?"
110 GOTO 20
200 PRINT "ALL RIGHT, THEN, I WONT."
Before we discuss the IF statement, you should first look at the STOP statement in line 80: a STOP statement stops the execution of the program, giving report 9.
Now as you can see, an IF statement takes the form
IF condition THEN statement
The statements here are GOTO statements, but they could be anything at all, even more IF statements. The condition is something that is going to be worked out as either true or false; if it comes out as true then the statement after THEN is executed, but otherwise it is skipped over.
The most useful conditions compare two numbers or two strings: they can test whether two numbers are equal, or whether one is bigger than the other; & can test whether two strings are equal, or whether one comes before the other in alphabetical order. They use the relations =, <, >, <=, >= and <>.
=, which we have used twice in the program (once for numbers & once for strings) means 'equals'. It is not the same as the = in a LET statement.
< means 'is less than', so that
1<2
2<1
& 3<1
are all true, but
1<0
& 0<2
are false.
To see how this works, let us write a program to input numbers & display the biggest so far.
10 PRINT "NUMBER","BIGGEST SO FAR"
20 INPUT A
30 LET BIGGEST=A
40 PRINT A,BIGGEST
50 INPUT A
60 IF BIGGEST<A THEN LET BIGGEST=A
70 GOTO 40
The crucial part is line 60, which updates BIGGEST if its old value was smaller than the new input number A.
> (shifted M) means 'is greater than', & is just like < but the other way round. You can remember which is which, because the thin end points to the number that is supposed to be smaller.
<= (shifted R  do not type it as < followed by =) means 'is less than or equal to', so that it is like < except that it holds even if the two numbers are equal: this 2<=2 holds, but 2<2 does not.
>= (shifted Y) means 'is greater than or equal to' & is similarly like >.
<> (shifted T) means 'is not equal to' the opposite in meaning to =.
All six of these relational operations have priority 5.
Mathematicians usually write <=, >= and <> as , and . They also write things like '2<3<4' to mean '2<3 and 3<4', but this is not possible in BASIC.
These relations can be combined using the logical operations AND, OR & NOT.
one relation AND another relation
is true whenever both relations are true.
one relation OR another
is true whenever one of the two relations is true (or both are).
NOT relation
is true whenever the relation is false and is false whenever the relation is true.
Logical expressions can be made with relations & AND, OR & NOT just as numerical expressions can be made with numbers & +,  and so on; you can even put in brackets if necessary. NOT has priority 4, AND 3 & OR 2.
Since (unlike other functions) NOT has fairly low priority, its argument does not need brackets unless it contains AND or OR; so NOT A = B means NOT (A = B) (which is the same as A <> B).
To illustrate this, clear the computer & try this program.
10 INPUT F$
20 INPUT AGE
30 IF F$="X" AND AGE<18 OR F$="AA" AND AGE<14 THEN PRINT "DONT";
40 PRINT "LET IN."
50 GOTO 10
Here F$ is supposed to be the category if a film  X for 18 years old & over, AA for 14 & over, & A or U for anyone, & the program works out whether a person of a given age is to be allowed to see the film.
Lastly, we can compare not only numbers, but also strings. We have seen '=' used in 'F$="X"', & you can even use the other five, < & so on.
So what does 'less than'
mean for strings? One thing it does not mean is 'shorter than', so don't
make that mistake. We make the definition that one string is less than
another if it comes first in alphabetical order: thus
"SMITH"  < "SMYTHE" 
"SMYTHE"  > "SMITH" 
"BLOGGS"  < "BLOGGSBLACKBERRY" 
"BILLION"  < "MILLION" 
"TCHAIKOVSKY"  < "WAGNER" 
"DOLLAR"  < "POUND" 
all hold. <= means 'is less than or equal to', & so on, just as for numbers.
Note: In some versions of BASIC  but not on the ZX81 , the IF statement can have the form
IF condition THEN line number
This means the same as
IF
condition THEN GOTO line number
Summary
Statements: IF, STOP
Operations: =, <, >, <=, >=, <>, AND, OR
Function: NOT
Exercises
1. <> and = are opposites in the sense that NOT A=B is the same as A<>B
&
NOT A<>B is the same as A=B
Persuade yourself that >= is opposite to <, and <= is opposite to > so that you can always get rid of NOT from in front of a relation by changing the relation to its opposite.
Also,
NOT (a first logical expression AND a second)
is the same as
NOT (the first) OR NOT (the second),
&
NOT (a first logical expression OR a second)
is the same as
NOT (the first) AND NOT (the second).
Using this you can work
NOTs
through brackets until eventually they are all applied to relations, &
then you can get rid of them. Thus, logically speaking, NOT is unnecessary.
You might still find that using it makes a program clearer.
2. BASIC can sometimes work along different lines from English. Consider, for instance, the English clause 'if A doesn't equal B or C'. How would you write this in BASIC? [The answer is not
'IF A<>B OR C' nor 'IF A<>B OR A<>C']
Don't worry if you don't understand exercises
3, 4 & 5, the points covered in them are rather refined.
3. (For experts.)
Try
PRINT 1=2,1<>2
which you might expect to give a syntax error. In fact, as far as the computer is concerned, there is no such thing as a logical value.
(i) =, <, >, <=, >=, and <> are all number valued binary operations, with priority 5. The result is 1 (for true) if the relation holds, & 0 (for false) if it does not.
(ii) In
IF condition THEN statement
the condition can actually be any numeric expression. If its value is 0, then it counts as false, & any other value counts as true. This the IF statement means exactly the same as
IF condition <>0 THEN statement
(iii) AND, OR
& NOT are also number valued operations.
X
AND
Y has the value

{ X if Y is nonzero (counting as true)
{ 0 if Y is zero (counting as false) 
X OR Y has the
value

{ 1 if Y is nonzero
{ X if Y is zero 
NOT X has the value  { 0 if X is nonzero
{ 1 if X is zero 
Read through the chapter again, in the light of this revelation, making sure that it all works.
In the expressions X
AND Y, X OR Y & NOT X, X and Y will each usually
take the value 0 or 1, for false or true. Work out the ten different combinations
& check that they do what you expect AND, OR & NOT
to do.
4. Try this program:
10 INPUT A
20 INPUT B
30 PRINT (A AND A>=B)+(B AND A<B)
40 GOTO 10
Each time it prints the larger of the two numbers A & B  why?
Convince yourself that you can think of
X AND Y
as meaning
'X if Y (else the result is 0)'
& of
X OR Y
as meaning
'X unless Y (in which case the result is 1)'
An expression using AND & OR like this is called a conditional expression. An example using OR could be
LET RETAIL PRICE=PRICE LESS VAT*(1.15 OR V$="ZERO RATED")
Notice how AND
tends to go with addition (because its default value is 0), & OR
tends to go with multiplication (because its default value is 1).
5. You can also make string valued conditional
expressions, but only using AND.
X$ AND Y$ has the value  { X$ if Y is nonzero
{ if Y is zero 
so it means 'X$ if Y (else the empty string)'.
Try this program, which inputs two strings & puts them in alphabetical order.
10 INPUT A$
20 INPUT B$
30 IF A$<=B$ THEN GOTO 70
40 LET C$=A$
50 LET A$=B$
60 LET B$=C$
70 PRINT A$;" ";("<" AND A$<B$)+("=" AND A$=B$);" ";B$
80 GOTO 10
6. Try this program:
10 PRINT "X"
20 STOP
30 PRINT "Y"
When you run it, it will display "X" & stop with report 9/20. Now type
CONT
You might expect this
to behave like 'GOTO 20', so that the computer would just stop again
without displaying "Y"; but this would not be very useful, so things are
arranged so that for reports with code (STOP statement executed),
the line number is increased by 1 for a CONT statement. This in
our example, 'CONT' behaves like 'GOTO 21' (which, since
there are no lines between 20 & 30, behaves like 'GOTO 30').
7. Many versions of BASIC (but not the ZX81 BASIC) have an ON statement, which takes the form
ON numeric expression GOTO line number, line number,...,line number In this the numeric expression is evaluated; suppose its value is n then the effect is that of.
GOTO the nth line number
For instance
ON A GOTO 100, 200, 300, 400, 500
Here, if A has the value 2, then 'GOTO 200' is executed. In ZX81 BASIC this can be replaced by
GOTO 100*A
In case the line numbers don't go up neatly by hundreds like this, work out how you could use
GOTO a conditional expression
instead.