Go forward to Predicates.
Go backward to Interactive Lisp Functions.
Go up to Internals.
Stack-Oriented Functions
........................
The functions described here perform various operations on the Calc
stack and trail. They are to be used in interactive Calc commands.
-- Function: calc-push-list VALS N
Push the Calc objects in list VALS onto the stack at stack level
N. If N is omitted it defaults to 1, so that the elements are
pushed at the top of the stack. If N is greater than 1, the
elements will be inserted into the stack so that the last element
will end up at level N, the next-to-last at level N+1, etc. The
elements of VALS are assumed to be valid Calc objects, and are
not evaluated, rounded, or renormalized in any way. If VALS is
an empty list, nothing happens.
The stack elements are pushed without any sub-formula selections.
You can give an optional third argument to this function, which
must be a list the same size as VALS of selections. Each
selection must be `eq' to some sub-formula of the corresponding
formula in VALS, or `nil' if that formula should have no
selection.
-- Function: calc-top-list N M
Return a list of the N objects starting at level M of the stack.
If M is omitted it defaults to 1, so that the elements are taken
from the top of the stack. If N is omitted, it also defaults to
1, so that the top stack element (in the form of a one-element
list) is returned. If M is greater than 1, the Mth stack element
will be at the end of the list, the M+1st element will be
next-to-last, etc. If N or M are out of range, the command is
aborted with a suitable error message. If N is zero, the
function returns an empty list. The stack elements are not
evaluated, rounded, or renormalized.
If any stack elements contain selections, and selections have not
been disabled by the `j e' (`calc-enable-selections') command,
this function returns the selected portions rather than the
entire stack elements. It can be given a third "selection-mode"
argument which selects other behaviors. If it is the symbol `t',
then a selection in any of the requested stack elements produces
an "illegal operation on selections" error. If it is the symbol
`full', the whole stack entry is always returned regardless of
selections. If it is the symbol `sel', the selected portion is
always returned, or `nil' if there is no selection. (This mode
ignores the `j e' command.) If the symbol is `entry', the
complete stack entry in list form is returned; the first element
of this list will be the whole formula, and the third element
will be the selection (or `nil').
-- Function: calc-pop-stack N M
Remove the specified elements from the stack. The parameters N
and M are defined the same as for `calc-top-list'. The return
value of `calc-pop-stack' is uninteresting.
If there are any selected sub-formulas among the popped elements,
and `j e' has not been used to disable selections, this produces
an error without changing the stack. If you supply an optional
third argument of `t', the stack elements are popped even if they
contain selections.
-- Function: calc-record-list VALS TAG
This function records one or more results in the trail. The VALS
are a list of strings or Calc objects. The TAG is the
four-character tag string to identify the values. If TAG is
omitted, a blank tag will be used.
-- Function: calc-normalize N
This function takes a Calc object and "normalizes" it. At the
very least this involves re-rounding floating-point values
according to the current precision and other similar jobs. Also,
unless the user has selected no-simplify mode (*Note
Simplification Modes::), this involves actually evaluating a
formula object by executing the function calls it contains, and
possibly also doing algebraic simplification, etc.
-- Function: calc-top-list-n N M
This function is identical to `calc-top-list', except that it
calls `calc-normalize' on the values that it takes from the
stack. They are also passed through `check-complete', so that
incomplete objects will be rejected with an error message. All
computational commands should use this in preference to
`calc-top-list'; the only standard Calc commands that operate on
the stack without normalizing are stack management commands like
`calc-enter' and `calc-roll-up'. This function accepts the same
optional selection-mode argument as `calc-top-list'.
-- Function: calc-top-n M
This function is a convenient form of `calc-top-list-n' in which
only a single element of the stack is taken and returned, rather
than a list of elements. This also accepts an optional
selection-mode argument.
-- Function: calc-enter-result N TAG VALS
This function is a convenient interface to most of the above
functions. The VALS argument should be either a single Calc
object, or a list of Calc objects; the object or objects are
normalized, and the top N stack entries are replaced by the
normalized objects. If TAG is non-`nil', the normalized objects
are also recorded in the trail. A typical stack-based
computational command would take the form,
(calc-enter-result N TAG (cons 'calcFunc-FUNC
(calc-top-list-n N)))
If any of the N stack elements replaced contain sub-formula
selections, and selections have not been disabled by `j e', this
function takes one of two courses of action. If N is equal to
the number of elements in VALS, then each element of VALS is
spliced into the corresponding selection; this is what happens
when you use the TAB key, or when you use a unary arithmetic
operation like `sqrt'. If VALS has only one element but N is
greater than one, there must be only one selection among the top
N stack elements; the element from VALS is spliced into that
selection. This is what happens when you use a binary arithmetic
operation like `+'. Any other combination of N and VALS is an
error when selections are present.
-- Function: calc-unary-op TAG FUNC ARG
This function implements a unary operator that allows a numeric
prefix argument to apply the operator over many stack entries.
If the prefix argument ARG is `nil', this uses
`calc-enter-result' as outlined above. Otherwise, it maps the
function over several stack elements; See Prefix Arguments.
For example,
(defun calc-zeta (arg)
(interactive "P")
(calc-unary-op "zeta" 'calcFunc-zeta arg))
-- Function: calc-binary-op TAG FUNC ARG IDENT UNARY
This function implements a binary operator, analogously to
`calc-unary-op'. The optional IDENT and UNARY arguments specify
the behavior when the prefix argument is zero or one,
respectively. If the prefix is zero, the value IDENT is pushed
onto the stack, if specified, otherwise an error message is
displayed. If the prefix is one, the unary function UNARY is
applied to the top stack element, or, if UNARY is not specified,
nothing happens. When the argument is two or more, the binary
function FUNC is reduced across the top ARG stack elements; when
the argument is negative, the function is mapped between the
next-to-top -ARG stack elements and the top element.
-- Function: calc-stack-size
Return the number of elements on the stack as an integer. This
count does not include elements that have been temporarily hidden
by stack truncation; See Truncating the Stack.
-- Function: calc-cursor-stack-index N
Move the point to the Nth stack entry. If N is zero, this will
be the `.' line. If N is from 1 to the current stack size, this
will be the beginning of the first line of that stack entry's
display. If line numbers are enabled, this will move to the
first character of the line number, not the stack entry itself.
-- Function: calc-substack-height N
Return the number of lines between the beginning of the Nth stack
entry and the bottom of the buffer. If N is zero, this will be
one (assuming no stack truncation). If all stack entries are one
line long (i.e., no matrices are displayed), the return value
will be equal N+1 as long as N is in range. (Note that in Big
mode, the return value includes the blank lines that separate
stack entries.)
-- Function: calc-refresh
Erase the `*Calculator*' buffer and reformat its contents from
memory. This must be called after changing any parameter, such
as the current display radix, which might change the appearance
of existing stack entries. (During a keyboard macro invoked by
the `X' key, refreshing is suppressed, but a flag is set so that
the entire stack will be refreshed rather than just the top few
elements when the macro finishes.)