Functions

This section documents all available functions in alphabetical order (except for the short addressing/value fetching functions, which are listed together at the beginning). The functions are described in a C-like notation; you don't have to write the types when you use the function in a formula. For example, use @(0,0,0), not @(int 0, int 0, int 0). If no type is given for the result of a function, it means the result type depends on the arguments. Brackets mark optional arguments.

**@([location l,][int x][,[int y][,[int z]]])**- returns the value of the cell at the specified location. If any of x, y or z is specified, that value overrides the corresponding coordinate of the given location, which defaults to the location of the current cell if it is omitted.
**location &([location l,][int x][, [int y][, [int z]]])**- the arguments are interpreted in exactly the same way as for @(), but this fuction returns the location, not the value of the cell at that location. So note for example that a bare & with no arguments (with or without parentheses) evaluates to the location of the current cell.
**D([location l,][int x][,[int y][,[int z]]])**- Like &(), except that any of x, y, or z specified are added to the given location, which defaults to the current location; and as a special case, if only the location is given, i.e. D(l), then the location l is added to the current location. Think “D” for “displaced (by).” Thus, both D(-1) and D(left) return the location of the cell immediately to the left of this one, and D(,2,1) returns the location of the cell two below this one on the following layer, as does D(&(0,2,1)), but D(TABLE,1) returns the location of the cell just to the right of the one labeled “TABLE”.
**R(args)**- Shorthand for @(D(args)). Think “R” for “relative.” Thus R(-1) returns the value of the cell immediately to the left of this one, and R(1) returns the same cell as this one but on the following layer, as do R(&(0,0,1)) and R(below), but R(TABLE1) returns the value of the cell immediately down from the one labeled “TABLE”.
**X(label to, label from, [fix_x], [fix_y], [fix_z])**- “Excel
reference”: returns the value of the cell at a computed target location.
This target location is the one reached from the current cell via
the same offset as the cell with label to has from label from.
The idea is that if you label the source of data you want to reference,
say with SRC, and the location of some place you want to
start referring to it with REF, then you can use X(SRC,REF)
to refer to the source data, and fill this formula to neighboring
cells to refer to the neighbors of the source, and it will all continue
to work if either the source or the reference is moved around in the
sheet.

If the fix_DIM argument is the fix keyword (as opposed to an empty value), then the corresponding coordinate of the target cell is set to match that of to. This corresponds to fixing the row or column (or layer) of the reference, as with a “$” character in Excel. Thus X(SRC,REF,1,1,1) is identical to @(SRC), but you should certainly prefer the latter for clarity of expression.

There is a corresponding location function X&() as well, which takes exactly the same arguments with the same meanings, but it is rarely needed. It is provided for completeness.

See the FAQ below for further discussion of cell references. **string $(string env)**- evaluates to the contents of the specified environment variable. If the variable does not exist, then an empty string will be returned.
**above|below|left|right|up|down[([location l])]**- As bare words (without any arguments and also without the parentheses) these symbols return a one-cell displacement in the named direction, e.g. D(above) gives the location of the same cell as the current on but in the previous layer and R(up) yields the value of the cell one up from the current cell. With parentheses, they act like @() but displaced by one cell in the named direction, so right() returns the value of the cell immediately to the right of the current one, and down(MYTABLE) gives the value one line down from the cell labeled MYTABLE, etc.
**float abs(float x)****int abs(int x)**- evaluates to the absolute value of x.
**float acos(float|int x)**- evaluates to the arc cosine of x, where x is given in radians.
**float arcosh(float|int x)**- evaluates to the arc hyperbolic cosine of x, where x is given in radians.
**float arsinh(float|int x)**- evaluates to the arc hyperbolic sine of x, where x is given in radians.
**float artanh(float|int x)**- evaluates to the arc hyperbolic tangent of x, where x is given in radians.
**float asin(float|int x)**- evaluates to the arc sine of x, where x is given in radians.
**float atan(float|int x)**- evaluates to the arc tangent of x, where x is given in radians.
**style background(int c)**- evaluates to a style token with the background color set to c (and no other fields set).
**below[([location l])]**- displacement by one cell in the positive z direction; see the fuller description at above.
**int bitand(int v1, ...)**- evaluates to the bitwise “and” of all the supplied values.
**int bitor(int v1, ...)**- evaluates to the bitwise “or” of all the supplied values.
**style bold([bool b])**- evaluates to a style token with the bold property set to b, which defaults to true (and no other fields set).
**bool bool[([x])]**- Converts x to a boolean value. This is very permissive; error values are unaffected; empty, integer 0, float 0.0, and boolean false values are false, and everything else is true. If x is omitted, defaults to the value of the current cell. If the parentheses are omitted as well, acts as a keyword, for example for testing types with is().
**float ceil(float x)**- evaluates to the smallest integral floating-point value greater than or equal to x.
**center**- keyword used as an argument to justify().
**clock(integer condition,[location[,location])**- conditionally clocks the specified cell if the condition is not 0. If two locations are given, all cells in that range will be clocked. The return value of clock is empty. Note that the clocked expression of a cell can clock itself; indeed, that's the only way that a cell can be clocked more than once in a single recalculation. Take care with the condition expression to avoid recalculation becoming stuck in an infinite loop, however.
**compact**- used as a keyword to the string() function; listed here to record that this identifier may not be used as a cell label.
**float cos(float|int x)**- evaluates to the cosine of x, where x is given in radians.
**float cosh(float|int x)**- evaluates to the hyperbolic cosine of x, where x is given in radians.
**decimal**- used as a keyword to the string() function; listed here to record that this identifier may not be used as a cell label.
**float deg2rad(float|int x)**- evaluates to the degrees that are equivalent to x radians.
**style dim([bool b])**- evaluates to a style token with the dim property set to b, which defaults to true (and no other fields set).
**down[([location l])]**- displacement by one cell in the positive y direction; see the fuller description at above.
**float e[()]**- evaluates to the Euler constant e. Note the parentheses are optional.
**empty[(args)]**- ignores all of its arguments and returns the empty value. Without parentheses, acts as a keyword, typically for is().
**error error[([message])]**- converts its argument to a string just as with the string() function, and then returns an error with that string as the message. Without parentheses, acts as a keyword, e.g. for is().
**eval(location)**- evaluates to the value of the expression in the cell at the given location, but evaluated in the context of the cell using eval(). This function may not be used nested any deeper than 32 times.
**boolean false**- represents the false Boolean value.
**fident**- a keyword indicating the token type of “function identifier,” provided for the sake of completeness. There is probably little practical call for this type.
**find(expr, location stride[,location start])**- examines cells in turn, returning the location of the first one at which expr evaluates to true, or boolean false if the boundary of the sheet is encountered. The second argument stride must not have all zero components, and is added to the location being examined at each iteration. Often it is useful to use a direction constant like up for the stride. The search begins at location start, which defaults to the current location plus the stride if it is not specified.
**fix**- used as a keyword to the X() and X&() functions; listed here to record that this identifier may not be used as a cell label.
**float float[([float|string|int|empty s])]**- converts into a floating point number the given float, string, int, or empty value (the latter converts to 0.0). If the argument is omitted, the value of the current cell is used. If the parentheses are omitted, acts as a keyword, e.g., for type testing with is().
**style floatfmt(decimal|scientific|compact|hexact)**- evaluates to a style token with the floating-point format set to the specified format, given as a bare word (and no other fields set).
**float floor(float x)**- evaluates to the largest integral floating-point value less than or equal to x.
**style foreground(int c)**- evaluates to a style token with the foreground color set to c (and no other fields set).
**float frac(float x)**- evaluates to the fractional part of x.
**funcall**- a keyword indicating the “funcall” token type used to encode expressions as tokens; may be used with is() for example.
**hexact**- used as a keyword to the string() function; listed here to record that this identifier may not be used as a cell label.
**int int[([int|float|string|empty x][, direction])]**- converts to an integer the given integer, float, string, or empty value x. (The latter converts to 0.) The optional second argument must be the name of one of the functions that produces a floating point integral value from a float, i.e., ceil, floor, round, or trunc, and it directs how to convert floating point values to an integer. (The default is trunc, see the documentation of the corresponding functions for a description of the conversion behavior.) If x is omitted, the value of the current cell is used. If in addition the parentheses are omitted, acts as a keyword, e.g., for value testing with is().
**is[([x][, type1, type2,...])]**- Boolean-valued type testing. Returns true if the given value x is any of the listed types. Each type may be any of the keywords bool, empty, error, fident, float, funcall, int, lident, location, number, operator, string, or style. Each of these identifies a single type, except number, which is a shorthand for empty, float, int. If no types are specified, returns true for any non-empty value. (In other words, is(x) is a boolean-valued version of n(x), without the special behavior when x is a location.) If x is omitted, defaults to the value of the current cell; the parentheses may be omitted as well, so bare is tests whether the current cell is non-empty.
**style italic([bool b])**- evaluates to a style token with the italic property set to b, which defaults to true (and no other fields set).
**style justify(left|right|center)**- evaluates to a style token with the justification set to the specified direction, given as a bare word. No other fields are set in the result.
**left[([location l])]**- displacement by one cell in the negative x direction; see the fuller description at above.
**string len(string s)**- evaluates to the length of s.
**lident**- a keyword indicating the “label identifier” token type. This type is not generally accessible, as labels always evaluate to their locations (or error if there is no such label).
**float log(float|int x[, float|int y])**- evaluates to the logarithm of x. If y is not specified, the result will be the natural logarithm, otherwise it will be the logarithm to the base of y.
**location**- currently this is only a keyword, e.g., for use with is(). Use &() to convert three integers to a location.
**location max(location l1, location l2) | max(v1, v2, ...)**- evaluates to the maximum in the same way min does for the minimum.
**location min(location l1, location l2) | min(v1, v2, ...)**- The first form evaluates to the location of the minimum of all values in the block marked by the corners pointed to by l1 and l2. Note that the empty cell is equal to 0, 0.0 and , so if the first minimum is an empty cell, the result will be a pointer to this cell, too. If you are not interested in the location of the minimum but the value itself, use @(min(l1, l2)). The second form simply returns the smallest of the specified values, returning an error if it encounters two that are not comparable (like a string and an integer).
**int n([location l1[, location l2]) | n( v1, v2, ...)**- The first form evaluates to the number of non-empty cells in the block with corners at locations l1 and l2. Location l2 defaults to l1; i.e., with a single location argument n(l1) just tests whether the cell at l1 is empty. Location l1 defaults to the current location. The second form simply returns the number of its arguments which are nonempty.
**number[([bool|empty|int|float|string x])]**- Converts its argument, which defaults to the value of the current cell, to the most appropriate number type. Thus, it leaves ints and floats alone, converts boolean values to integers 1 or 0, converts empty to integer 0, and converts numeric strings to ints if they don't have a decimal point and floats if they do. Without parentheses, acts as a keyword for is(), abbreviating the combination of float, int, and empty.
**operator**- A keyword indicating the “operator” token type, representing symbols like parentheses, plus signs, commas, etc.
**poly(float|integer x, float|integer cn[, ...])**- evaluates the polynomial .
**style precision(int x)**- evaluates to a style token in which the precision is set to x (and no other fields are set).
**float rad2deg(float|int x)**- evaluates to the radians that are equivalent to x degrees.
**right[([location l])]**- displacement by one cell in the positive x direction; see the fuller description at above.
**float rnd()**- evaluates to a pseudo-random number between 0.0 and 1.0, changing each time the expression is evaluated.
**float round(float x)**- evaluates to the argument x rounded to an integral value. Unless the system floating-point rounding direction has been changed, this will be the integral value nearest to x.
**scientific**- Used as a keyword argument to the string() function; listed here to record that this identifier may not be used as a cell label.
**style shadowed([bool b])**- evaluates to a style token with the shadowed property set to b, which defaults to true (and no other fields set).
**float sin(float|int x)**- evaluates to the sine of x, where x is given in radians.
**float sinh(float|int x)**- evaluates to the hyperbolic sine of x, where x is given in radians.
**float sqrt(float|int x)**- evaluates to the square root of x.
**string strftime(string f [, integer t])**- evaluates to the time t formatted according to the format specified in f. Times in t are counted in seconds since epoch (1970-1-1 0:00). If t is empty or 0, the actual time is used. For the format specifications consult the man page of your c library, strftime (3). Example: @(now)=int(strftime(%s)) sets the field with label now to the actual time.
**string string(x[, [integer precision][, format]])**- evaluates to the string representation of its first argument. The optional second argument gives the precision used for converting floating point numbers to string form. The optional third argument may be one of the keywords “decimal”, “scientific”, “compact”, or “hexact”, controlling the format for converting floating point numbers to string form. If the optional arguments are not specified, current defaults are used.
**int strptime(string f, string datetime)**- evaluates to the seconds since epoch (1970-1-1 0:00) of the datetime string, parsed according to the format specified in f. For the format specifications consult the man page of your c library, strptime (3).
**style style[([x])]**- attempts to convert x to a style; this currently only succeeds if x already is a style; or if it is a location, it extracts the current style of that location. x defaults to the current location. Without parentheses as a bare word, style is a keyword used for example by is() to test the type of an entity.
**string substr(string s, integer x [,integer y])**- evaluates to the substring of s between x and y, which start at 0. If is omitted, the substring proceeds to the end of the string.
**sum(location l1, location l2) | sum( v1, v2, ... )**- The first form evaluates to the sum of all values in the block with corners at locations l1 and l2. The second form simply adds all of its arguments.
**float tan(float|int x)**- evaluates to the tangent of x, where x is given in radians.
**float tanh(float|int x)**- evaluates to the hyperbolic tangent of x, where x is given in radians.
**float tau[()]**- evaluates to the circle constant , the ratio of circumference to radius of any circle. (Note .)
**int time[()]**- each time this expression is evaluated, it gives the time in seconds since the epoch.
**style transparent([bool b])**- evaluates to a style token with the transparent property set to b, which defaults to true (and no other fields set).
**boolean true**- represents the true Boolean value.
**float trunc(float x)**- evaluates to the integer part of x in floating-point form; generally this should be the same as x - frac(x).
**style underline([bool b])**- evaluates to a style token with the underline property set to b, which defaults to true (and no other fields set).
**up[([location l])]**- displacement by one cell in the negative y direction; see the fuller description at above.)
**int x([location l])****int y([location l])****int z([location l])**- evaluate to the x, y and z position of the given location, of the currently updated cell if none is given. These functions are usually used in combination with the @ function for obtaining information from other cells, but see also the convenience functions R() and D() for relative references.