OUtline:
Constants
 Numbers
 integers
 rational
 float
 bigfloat
 complex
 constant symbols: 
  boolean
  pi, e, ...
 strings
 file names
 constant expressions: %e+%pi, sqrt(5), sin(1)

 indeterminates
 variables
 functions

 expressions
  general mathematical representation
    operators
    + * ^ () = ~ > < /  .. more can be added ... see ...
    operands, parsing
  CRE form
  Poisson form
  matrices
 programming objects
  lists
  hash arrays
  arrays
  function definitions: simple
  memo-functions
  macros- see appendix
  complete prog. lang - see appendix

  <chapter

statements, programs, 
arrays of functions
syntax extension?

 < chapter
 representation of mathematical functions (min, max, abs, sqrt, signum, log)

<  chapter

controlling the computations
  simplifier
  evaluator
  flags
  declarations

  < chapter
  error messages

standard description of a mathematical function...


e.g.  sin(x) 

summary:  sin(x) is intended to represent the trigonometric sine function.
Commands such as diff, integrate, taylor, limit, etc., deal appropriately
with it.

sin(x) is also a command to compute the sine function of its argument,
and for some types of argument x, sin(x) will be replaced by its value.  For
example, sin(1.0) is immediately changed to  0.8414709848078965.


more detailed:

Treating sin(x) mathematically, certain equivalence rules are applied:
If x is a special argument as given in the table below, sin(x) is
reduced to another form:
0, sin(0) ==> 0
n/m %pi for certain fractions n/m, sin(3/4*%pi) ==>sqrt(2)/2

apparently negative, sin(-x) ==> - sin(x);

a sum of an expression and a multiple of %pi, sin(a+%pi/2) ==> cos(a)
a pure imaginary quantity, sin(%i*x) ==> %i*sinh(x)
asin(y):  sin(asin(y))==> y
sin(atan(x)) ==> x/(sqrt(x^2+1)

Certain operations, including limit, diff, integrate, taylor, rectform,
polarform, intopois, trigsimp, 
.... apply other rules to make mathematical transformations involving
sin as input or output.
see, for example,
trigexpand(sin(x+y)) ==> cos(x) sin(y) + sin(x) cos(y)
rectform(sin(a+b*%i))==>
polarform(a+b*%i)==>
taylor(sin(x),x,0,3)==>
limit(sin(x)/x) ==>


Sometimes Macsyma treats sin(x) as a command to compute a numerical
approximation to the sine function.

The system goes through about like this...

  If x is a floating point number then sin returns a flt. pt. 
  If x is an integer and numer:true, then...sin returns a flt pt number.
  If x is a bigfloat,sin returns a bigfloat

Sometimes the two systems interact: 
  If x is an imaginary number ( e.g 3.0*%i), Macsyma produces %i*sinh(3.0)
  and then 10.0178749274099 %i.

Sometimes you will want to add to the semantics associated
with the sine function.  Here is an example:
You may recall that for small arguments, sin(x)~x.
and that cos(x) ~ 1
If you use the name eps to represent a "small quantity",
you might wish to replace sin(eps) by eps. and cos(eps) by 1.
This is done by the commands  tellsimp(sin(eps),eps); tellsimp(cos(eps),1);
then trigexpand(sin(x+eps)) ==>sin(x)+eps*cos(x).

By analogy, consider cos, tan, csc, sec, cot, and the other trig functions to be handled
with similar attention to detail, although some of them will first be
mapped onto the more usual sin and cos, before great effort is expended.
Also, the functions are extended to the complex plane in the usual fashion,
and may bring into play the sinh, cosh, tanh, csch, sech, coth functions.
The less usual of the hyperbolic functions
are also mapped into the more common hyperbolic functions for simplifications.

Inverse trigonometric and hypergeometric
functions from asin through acoth are also available with simplifications,
evaluations, differentiation, integration, etc.

Furthermore, any of these can be converted into exponential form by
ev(form,exponentialize).

A note on branch cuts: The inverse functions may be expressed in terms of
logarithms.  The choice of principal value may not always be the one
you expect, and if it is critical to your calculation to keep consistency
in such choices, please realize that the introduction of symbols whose
sign is unknown, may require ambiguity in places that numeric constants
do not.

The first table below summarizes the basic data types that are familiar
to most mathematicians who have used computers in their work.  They are
similar to those data types in conventional programming languages, although
they are in some ways extended or generalized.
.nf