mirror of
https://github.com/lcn2/calc.git
synced 2025-08-16 01:03:29 +03:00
69 lines
2.8 KiB
Plaintext
69 lines
2.8 KiB
Plaintext
Function definitions
|
|
|
|
Function definitions are introduced by the 'define' keyword.
|
|
Other than this, the basic structure of a function is like in C.
|
|
That is, parameters are specified for the function within parenthesis,
|
|
the function body is introduced by a left brace, variables are
|
|
declared for the function, statements implementing the function
|
|
follow, and the function is ended with a right brace.
|
|
|
|
There are some subtle differences, however. The types of parameters
|
|
and variables are not defined at compile time, but instead are typed
|
|
at runtime. Thus there is no definitions needed to distinguish
|
|
between integers, fractions, complex numbers, matrices, and so on.
|
|
Thus when declaring parameters for a function, only the name of
|
|
the parameter is needed. Thus there are never any declarations
|
|
between the function parameter list and the body of the function.
|
|
|
|
For example, the following function computes a factorial:
|
|
|
|
define factorial(n)
|
|
{
|
|
local ans;
|
|
|
|
ans = 1;
|
|
while (n > 1)
|
|
ans *= n--;
|
|
return ans;
|
|
}
|
|
|
|
If a function is very simple and just returns a value, then the
|
|
function can be defined in shortened manner by using an equals sign
|
|
in place of the left brace. In this case, the function declaration
|
|
is terminated by a newline character, and its value is the specified
|
|
expression. Statements such as 'if' are not allowed. An optional
|
|
semicolon ending the expression is allowed. As an example, the
|
|
average of two numbers could be defined as:
|
|
|
|
define average(a, b) = (a + b) / 2;
|
|
|
|
Functions can be defined which can be very complex. These can be
|
|
defined on the command line if desired, but editing of partial
|
|
functions is not possible past a single line. If an error is made
|
|
on a previous line, then the function must be finished (with probable
|
|
errors) and reentered from the beginning. Thus for complicated
|
|
functions, it is best to use an editor to create the function in a
|
|
file, and then enter the calculator and read in the file containing
|
|
the definition.
|
|
|
|
The parameters of a function can be referenced by name, as in
|
|
normal C usage, or by using the 'param' function. This function
|
|
returns the specified parameter of the function it is in, where
|
|
the parameters are numbered starting from 1. The total number
|
|
of parameters to the function is returned by using 'param(0)'.
|
|
Using this function allows you to implement varargs-like routines
|
|
which can handle any number of calling parameters. For example:
|
|
|
|
define sc()
|
|
{
|
|
local s, i;
|
|
|
|
s = 0;
|
|
for (i = 1; i <= param(0); i++)
|
|
s += param(i)^3;
|
|
return s;
|
|
}
|
|
|
|
defines a function which returns the sum of the cubes of all it's
|
|
parameters.
|