*4.12:*

**adda/cstr**/function notation classes:. how does the type mgt express

parsing particulars?

eg, some infixes can be combined:

a*b*c = *(a,b,c),

whereas, a /b /c = *(a, /b, /c) .

so then (/) is not listable ...

*types of declarations:***# unary:**

eg, sin(a);

**# infix listable:**

*(a, ...) -- = a * b * c * ....

--. implies associativity;

ie, (a*b)*c = a*(b*c) = *(a,b,c).

**# infix binary:**

^(a,b) -- a^b^c = a^(b^c)

-- implies non-associativity;

ie, (a^b)^c =/= a^(b^c);

and, the given rule specifies which way to parse .

--. precedence is indicated by

the order in which operators are declared .

. can also be a prefix .

-- undeclared are assumed to be 2 args of the same type

(ie, the same supertype).

**# infix or unary:**

/(a=1,b) -- = 1 * /b;

-(a=0,b) -- = 0 + -b

-- /a = 1/a;

**# nofix:**no arg expected;

eg, pi, e, dimensions,

marks an EOterm

(is also trivially a prefix)

-- declared as having no args: x.t .

**# postfix:**

(x)!, -- factorial's declaration,

(having multiple parameters but of various types

counts as 1 arg of type record ):

(x.t, x.u)!.v .

[4.30: {postfix, prefix} are treated as separate functions,

like so:

()!, -- postfix

!, !() -- prefix .]

. each type class can overload an operator

as either {unary#prefix, unary#post}

or -- as in the case of Number.type --

{ infix (2 args)

, prefix (other numbers of args)

} . a symbol can be designated as

both pre- and post-fix

but cannot be both post- and in-fix .

. the one place math has a postfix is (x!).

in that case,

it's at the end of a term just like an infix

so the only way to be certain that a postfix

is not the infix found between terms

is by disallowing operators from being

both infix's and postfix's .

. postfix's can, however,

double as prefix's,

as can the infix's;

so, expecting a term and finding (!)

means the (!) is a prefix to that term;

whereas, expecting an infix or EOse

(end of subexpression) and finding (!)

means the (!) is a postfix .

. a subexpression can have multiple terms

separated by infix's;

terms are defined as being either:

nofix's: symbols accepting no args;

or a prefix followed by an arg .

. a subexpression is anything terminated by

an enclosure`end:

ie,

, . ; ) } .> end-of-file ] .