HOC 1

Table of contents


NAME

hoc \(mi interactive floating point language

SYNOPSIS

hoc [ file ]

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.

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. Certain variables are already initialized:

E
base of natural logs
PI
PHI
golden ratio
GAMMA
Euler's constant
DEG
180/PI, degrees per radian
PREC
maximum number of significant digits in output, initially 15; PREC=0 gives shortest `exact' values.

Expressions are formed with these C-like operators, listed by decreasing precedence.
^
exponentiation
!
*
+
>
&&
||
=

Built in functions include abs, acos, atan (one argument), cos, cosh, erf, erfc, exp, gamma, int, log, log10, sin, sinh, sqrt, tan, and tanh. The function read(x) reads a value into the variable x; 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. Within a function or procedure, arguments are referred to as $1, $2, etc.; all other variables are global.


EXAMPLES

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

SEE ALSO

bc(1), dc(1)

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


BUGS

All components of a for statement must be non-empty.

Error recovery is imperfect within function and procedure definitions.

The treatment of newlines is not exactly user-friendly.

Functions and procedures typically have to be declared before use, which makes mutual recursion a bit impossible.

Arguments $1, etc., are not really variables and thus won't work in constructs like, for instance, $1++.