| .TH HOC 1 |
| .SH NAME |
| hoc \- interactive floating point language |
| .SH SYNOPSIS |
| .B hoc |
| [ |
| .I file ... |
| ] |
| [ |
| .B -e |
| .I expression |
| ] |
| .SH DESCRIPTION |
| .I Hoc |
| interprets a simple language for floating point arithmetic, |
| at about the level of BASIC, with C-like syntax and |
| functions. |
| .PP |
| The named |
| .I files |
| are read and interpreted in order. |
| If no |
| .I file |
| is given or if |
| .I file |
| is |
| .L - |
| .I hoc |
| interprets the standard input. |
| The |
| .B -e |
| option allows input to |
| .I hoc |
| to be specified on the command line, to be treated as if it appeared in a file. |
| .PP |
| .I Hoc |
| input consists of |
| .I expressions |
| and |
| .IR statements . |
| Expressions are evaluated and their results printed. |
| Statements, typically assignments and function or procedure |
| definitions, produce no output unless they explicitly call |
| .IR print . |
| .PP |
| Variable names have the usual syntax, including |
| .LR _ ; |
| the name |
| .L _ |
| by itself contains the value of the last expression evaluated. |
| The variables |
| .BR E , |
| .BR PI , |
| .BR PHI , |
| .BR GAMMA |
| and |
| .B DEG |
| are predefined; the last is 59.25..., degrees per radian. |
| .PP |
| Expressions are formed with these C-like operators, listed by |
| decreasing precedence. |
| .TP |
| .B ^ |
| exponentiation |
| .TP |
| .B ! - ++ -- |
| .TP |
| .B * / % |
| .TP |
| .B + - |
| .TP |
| .B > >= < <= == != |
| .TP |
| .B && |
| .TP |
| .B || |
| .TP |
| .B = += -= *= /= %= |
| .PP |
| Built in functions are |
| .BR abs , |
| .BR acos , |
| .BR asin , |
| .B atan |
| (one argument), |
| .BR cos , |
| .BR cosh , |
| .BR exp , |
| .BR int , |
| .BR log , |
| .BR log10 , |
| .BR sin , |
| .BR sinh , |
| .BR sqrt , |
| .BR tan , |
| and |
| .BR tanh . |
| The function |
| .B read(x) |
| reads a value into the variable |
| .B x |
| and returns 0 at EOF; |
| the statement |
| .B print |
| prints a list of expressions that may include |
| string constants such as |
| \fL"hello\en"\f1.\fP |
| .PP |
| Control flow statements are |
| .BR if - else , |
| .BR while , |
| and |
| .BR for , |
| with braces for grouping. |
| Newline ends a statement. |
| Backslash-newline is equivalent to a space. |
| .PP |
| Functions and procedures are introduced by the words |
| .B func |
| and |
| .BR proc ; |
| .B return |
| is used to return with a value from a function. |
| .SH EXAMPLES |
| .EX |
| 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) |
| .EE |
| .SH SOURCE |
| .B \*9/src/cmd/hoc |
| .SH "SEE ALSO" |
| .IR bc (1), |
| .IR dc (1) |
| .br |
| B. W. Kernighan and R. Pike, |
| .I |
| The Unix Programming Environment, |
| Prentice-Hall, 1984 |
| .SH BUGS |
| Error recovery is imperfect within function and procedure definitions. |