Search Top Index
HELP IF Steven Hardy Jan 1978 Revised: Adrian Howard Mar 1992 -if- is the first word of a conditional expression, for example: if tough(steak) then fry(steak) else grill(steak) endif When this statement is executed, the POP-11 system first executes the condition (i.e. "tough(steak)"); if this evaluates to -false- then "grill(steak)" is executed, otherwise "fry(steak)" is executed. The full syntax of allowable conditional commands is quite complex. An -if- statement has the form: if <CONDITION> then <CONSEQUENT> elseif <CONDITION> then <CONSEQUENT> ... [any number of additional -elseif-...-then-.... clauses] ... else <CONSEQUENT> endif The "else <CONSEQUENT>" can be omitted if desired. The "elseif <CONDITION> then <CONSEQUENT>" can be either omitted or repeated as many times as required. A <CONDITION> is any expression, and a <CONSEQUENT> is any sequence of POP-11 statements. The condition should, when executed, produce a result. If the result is -false-, then the corresponding consequent is ignored, and the program moves on to the next -elseif-, or if there isn't one, to the -else- clause. If there is no -elseif- or -else-, then the program moves on to the instruction following the -endif-. If the result of executing a condition is anything other than -false-, then it is treated as if it were -true-, and the corresponding consequent is executed, e.g. if 3 then "three" endif => ** three IF statements can be nested inside one another, i.e. a <CONDITION> or a <CONSEQUENT> of an -if- statement may itself contain -if- statements. For example: if isnumber(n) then if n > 0 then 'positive'=> else 'less than or equal to zero'=> endif; endif; It is permissible, but unusual, for a <CONSEQUENT> to contain no code at all, for example: define prlist(list); lvars list; if list == [] then else hd(list) => prlist(tl(list)); endif enddefine It is clearer to use *UNLESS in this case, i.e.: define prlist(list); lvars list; unless list == [] then hd(list)=> prlist(tl(list)); endunless; enddefine; The expression unless <CONDITION> then <CONSEQUENT> is equivalent to: if not(<CONDITION>) then <CONSEQUENT> See *UNLESS and *NOT for more details. There is also an -elseunless- branch which is used in the same way as -elseif-. The expression ... elseunless <CONDITION> ... is the same as doing ... elseif not(<CONDITION>) ... If a conditional statement starts with -if- it must end with -endif-. If it starts with -unless- it must end with -endunless-. Either form may include -elseif-, -elseunless-, or -else- clauses. For further information see: *ELSEIF *ELSEUNLESS *UNLESS *BOOLEAN --- Boolean values in POP-11. *CONDITIONALS --- Summary of conditional statements in POP-11. *CONTROL --- An overview of control facilities in POP-11. REF *SYNTAX *POPSYNTAX Summary of POP-11 syntax --- C.all/help/if --- Copyright University of Sussex 1992. All rights reserved. ----------