# 4.3 Functions

Many standard mathematical and operating system functions are pre-defined within Pyxplot’s mathematical environment. These range from everyday examples like trigonometric functions, to very specialised functions; there is even a function to return the phase of the Moon on any given day. As with the mathematical constant, common functions are defined in the user’s default namespace, for example

`pyxplot> print exp(2)`
`7.3890561`

whilst others live in modules, for example

    print ast.moonPhase( time.now() )

which returns the present phase of the Moon in radians, and

    print os.path.filesize("/etc/passwd")

which returns the size of a file (in units of bytes, of course!).

A complete list of these functioned, sorted by module, can be found in Chapter 2. Another quick way to find out some more information about a function is the print the function object, for example:

`pyxplot> print log`
`log(x) returns the natural logarithm of x.`

All, of Pyxplot’s built-in constants, functions and modules are contained in the module `defaults`, which can also be printed to view its contents:

    print defaults

It is possible to access `pi`, for example, as `defaults.pi`, though in practice this syntax is very rarely needed. All of the objects in the `defaults` module are always accessible by name (i.e. they are always in any namespace), unless another local or global variable exists with the same name.

The user can define his own algebraic function definitions using a similar syntax to that used to declare new variables, as in the examples:

    f()    = pi
    g(x)   = x*sin(x)
    h(x,y) = x*y

Function objects are just like any other variables, and can even be used as arguments to other functions:

`pyxplot> f = sum`
`pyxplot> print f`
`sum(...) returns the sum of its arguments.`
`pyxplot> f = sin`
`pyxplot> g(x,y) = x(x(y))`
`pyxplot> print g(f,1)`
`0.74562414`

User-defined functions can be undefined in the same way as any other variable, for example by typing:

    f =

Where the logic required to define a particular function is greater than can be contained in a single algebraic expression, a subroutine should be used (see Section ); these allow an arbitrary numbers of lines of Pyxplot code to be executed whenever a function is evaluated.

- 4.3.1 Spliced functions