Keywords: sic

Next: Execution Level Up: SIC as a programming Previous: Loops Contents Index

### Structured Programming and Logical Expressions

SIC includes structured logical tests of the form (if-blocks):

          IF Logical_Expression [THEN]
            ...
          ELSE IF Logical_Expression [THEN]
            ...
          ELSE
            ...
          ENDIF

or of the form (if-statements):

          IF Logical_Expression One_Command_Line

The if-block form is similar to FORTRAN with two differences. First, the `THEN` keyword is optional. Second, `ELSE` and `IF` must be separated by at least one space or tab in the `ELSE IF` command. In addition, provided the restriction on the total number of loops, procedures and `IF` blocks is met, any nesting between loops, procedures and `IF` blocks is allowed.

Variables can appear in the logical expressions, and this is one of the most frequent use for variables. An `IF` block must be complete in a procedure or loop, otherwise an error occurs.

Logical expressions may include operations on arithmetic, logical or character variables. In logical expressions, strings (i.e. text included between double quotes) are recognized as character constants. Character variables should not be included between single quotes, since their current values would be substituted by SIC before logical expression analysis. Arithmetic sub-expressions are allowed.

Assuming `GOOD` is a character variable whose current value is `"Let it be"`, and `PI = 3.1415926535897932` (Double precision), examples of valid logical expressions are :

            L = ("I am happy".EQ.GOOD) (.FALSE.)

            L = ("Let it be".EQ.GOOD) (.TRUE.)

            L = ("I am happy".EQ."'GOOD'") (.FALSE.)
        evaluated literally since GOOD is not substituted in a string

            L = PI.EQ.ACOS(-1.0) (.TRUE.)

            L = 'PI'.EQ.2*ASIN(1.0) (.FALSE.)
        evaluated as 3.141592653589793.EQ.2*ASIN(1.0)
        because of implicit formatting, one digit being lost in the
        formatting because of binary to decimal conversion.

            L = ("I am happy".NE.GOOD).OR.(PI.EQ.ACOS(-1.0))

But the following expressions are invalid :

            L = (PI.EQ.GOOD) Variable type mismatch.

            L = ("I am happy".NE.'GOOD')
        Because it is evaluated as ("I am happy".NE.Let it be).

Next: Execution Level Up: SIC as a programming Previous: Loops Contents Index