HOC(1plan9) | HOC(1plan9) |

# NAME¶

hoc - interactive floating point language

# SYNOPSIS¶

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

# DESCRIPTION¶

*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.

# EXAMPLES¶

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)

# SOURCE¶

**/src/cmd/hoc**

# SEE ALSO¶

bc(1), dc(1)

B. W. Kernighan and R. Pike, *The Unix Programming Environment,*
Prentice-Hall, 1984

# BUGS¶

Error recovery is imperfect within function and procedure definitions.