HOC(1plan9)                                                        HOC(1plan9)

       hoc - interactive floating point language

       hoc [ file ...  ] [ -e expression ]

       Hoc interprets a simple language for floating point arithmetic, at
       about the level of BASIC, with C-like syntax and functions.

       The named files are read and interpreted in order.  If no file is given
       or if file is hoc interprets the standard input.  The -e option allows
       input to hoc to be specified on the command line, to be treated as if
       it appeared in a file.

       Hoc input consists of expressions and statements.  Expressions are
       evaluated and their results printed.  Statements, typically assignments
       and function or procedure definitions, produce no output unless they
       explicitly call print.

       Variable names have the usual syntax, including the name by itself
       contains the value of the last expression evaluated.  The variables E,
       PI, PHI, GAMMA and DEG are predefined; the last is 59.25..., degrees
       per radian.

       Expressions are formed with these C-like operators, listed by
       decreasing precedence.

       ^      exponentiation

       ! - ++ --

       * / %

       + -

       > >= < <= == !=



       = += -= *= /= %=

       Built in functions are abs, acos, asin, atan (one argument), cos, cosh,
       exp, int, log, log10, sin, sinh, sqrt, tan, and tanh.  The function
       read(x) reads a value into the variable x and returns 0 at EOF; the
       statement print prints a list of expressions that may include string
       constants such as "hello\n".

       Control flow statements are if-else, while, and for, with braces for
       grouping.  Newline ends a statement.  Backslash-newline is equivalent
       to a space.

       Functions and procedures are introduced by the words func and proc;
       return is used to return with a value from a function.

       func gcd(a, b) {
            temp = abs(a) % abs(b)
            if(temp == 0) return abs(b)
            return gcd(b, temp)
       for(i=1; i<12; i++) print gcd(i,12)


       bc(1), dc(1)
       B. W. Kernighan and R. Pike, The Unix Programming Environment,
       Prentice-Hall, 1984

       Error recovery is imperfect within function and procedure definitions.