Читаем UNIX — универсальная среда программирования полностью

func fac if ($1 = 0) return 1 else return $1 * fac($1-1)

fac(0)

fac(7)

fac(10)

3.7.7 fac2

func fac {

 if ($1 = 0) {

  return 1

 }

 return $1 * fac($1-1)

}

i=0

while(i=20){

 print "factorial of ", i, "is ", fac(i), "\n"

 i=i+1

}

3.7.8 fib

proc fib {

 a = 0

 b = 1

 while (b $1) {

  print b

  c = b

  b = a+b

  a = c

 }

 print "\n"

}

3.7.9 fib2

{

 n=0

 a=0

 b=1

 while(b10000000){

  n=n+1

  c=b

  b=a+b

  a=c

  print(b)

 }

 print(n)

}

3.7.10 fibsum

proc fib{

 a=1

 b=1

 c=2

 d=3

 sum = a+b+c+d

 while(d$1){

  e=d+c

  print(e)

  a=b

  b=c

  c=d

  d=e

  sum=sum+e

 }

 print(sum)

}

fib(1000)

3.7.11 fibtest

proc fib {

 a = 0

 b = 1

 while (b $1) {

  c = b

  b = a+b

  a = c

 }

}

i = 1

while (i 1000) {

 fib(1000)

 i = i + 1

}

3.7.12 hoc.h

typedef struct Symbol { /* symbol table entry */

 char *name;

 short type;

 union {

  double val; /* VAR */

  double (*ptr); /* BLTIN */

  int (*defn); /* FUNCTION, PROCEDURE */

  char *str; /* STRING */

 } u;

 struct Symbol *next; /* to link to another */

} Symbol;

Symbol *install, *lookup;


typedef union Datum { /* interpreter stack type */

 double val;

 Symbol *sym;

} Datum;

extern Datum pop;

extern eval, add, sub, mul, div, negate, power;


typedef int (*Inst);

#define STOP (Inst)0


extern Inst *progp, *progbase, prog[], *code;

extern assign, bltin, varpush, constpush, print, varread;

extern prexpr, prstr;

extern gt, lt, eq, ge, le, ne, and, or, not;

extern ifcode, whilecode, call, arg, argassign;

extern funcret, procret;

3.7.13 hoc.ms

.EQ

delim @@

.EN

.TL

Hoc - An Interactive Language For Floating Point Arithmetic

.AU

Brian Kernighan

Rob Pike

.AB

.I Hoc

is a simple programmable interpreter

for floating point expressions.

It has C-style control flow,

function definition and the usual

numerical built-in functions such as cosine and logarithm.

.AE

.NH

Expressions

.PP

.I Hoc

is an expression language,

much like C:

although there are several control-flow statements,

most statements such as assignments

are expressions whose value is disregarded.

For example, the assignment operator

= assigns the value of its right operand

to its left operand, and yields the value,

so multiple assignments work.

The expression grammar is:

.DS

.I

expr: number

 | variable

 | ( expr )

 | expr binop expr

 | unop expr

 | function ( arguments )

.R

.DE

Numbers are floating point.

The input format is

that recognized by @scanf@(3):

.ix [scanf]

digits, decimal point, digits,

.ix [hoc] manual

.ix assignment expression

.ix multiple assignment

@e@ or @E@, signed exponent.

At least one digit or a decimal point

must be present;

the other components are optional.

.PP

Variable names are formed from a letter

followed by a string of letters and numbers,

@binop@ refers to binary operators such

as addition or logical comparison;

Перейти на страницу:
Нет соединения с сервером, попробуйте зайти чуть позже