Patch for Gnu Emacs Calc, 1.06 -> 1.07, part 3/3
Dave Gillespie
daveg at near.cs.caltech.edu
Wed Oct 31 04:23:27 AEST 1990
#!/bin/sh
# this is part 3 of a multipart archive
# do not concatenate these parts, unpack them in order with /bin/sh
# file calc.patch continued
#
CurArch=3
if test ! -r s2_seq_.tmp
then echo "Please unpack part 1 first!"
exit 1; fi
( read Scheck
if test "$Scheck" != $CurArch
then echo "Please unpack part $Scheck next!"
exit 1;
else exit 0; fi
) < s2_seq_.tmp || exit 1
sed 's/^X//' << 'SHAR_EOF' >> calc.patch
X! functions of the first and second kinds, respectively. Note that
X! in @samp{besJ(n,x)} and @samp{besY(n,x)} the ``order'' parameter
X @samp{n} is often an integer, but is not required to be one.
X Calc's implementation of the Bessel functions currently limits the
X precision to 8 digits, and may not be exact even to that precision.
X! Use with care!
X
X @node Branch Cuts, Random Numbers, Advanced Math Functions, Scientific Functions
X @section Branch Cuts and Principal Values
X--- 9552,9563 ----
X @tindex besY
X The @kbd{f j} (@code{calc-bessel-J}) [@code{besJ}] and @kbd{f y}
X (@code{calc-bessel-Y}) [@code{besY}] commands compute the Bessel
X! functions of the first and second kinds, respectively.
X! In @samp{besJ(n,x)} and @samp{besY(n,x)} the ``order'' parameter
X @samp{n} is often an integer, but is not required to be one.
X Calc's implementation of the Bessel functions currently limits the
X precision to 8 digits, and may not be exact even to that precision.
X! Use with care!@refill
X
X @node Branch Cuts, Random Numbers, Advanced Math Functions, Scientific Functions
X @section Branch Cuts and Principal Values
X***************
X*** 9488,9501 ****
X
X @cindex Branch cuts
X @cindex Principal values
X! All of the logarithmic, trigonometric, and hyperbolic functions are defined
X! for complex numbers as well as for reals. This section describes the values
X returned in cases where the general result is a family of possible values.
X Calc follows section 12.5.3 of Steele's @cite{Common Lisp, the Language} in
X these matters. This section will describe each function briefly; for a
X more detailed discussion, consult Steele's book. Except as noted below,
X these branch cuts also exactly match those implemented by the HP-28C
X! calculator.
X
X Note: The current implementations of these functions with complex arguments
X are designed with proper behavior around the branch cuts in mind, @emph{not}
X--- 9564,9578 ----
X
X @cindex Branch cuts
X @cindex Principal values
X! All of the logarithmic, trigonometric, and other scientific functions are
X! defined for complex numbers as well as for reals.
X! This section describes the values
X returned in cases where the general result is a family of possible values.
X Calc follows section 12.5.3 of Steele's @cite{Common Lisp, the Language} in
X these matters. This section will describe each function briefly; for a
X more detailed discussion, consult Steele's book. Except as noted below,
X these branch cuts also exactly match those implemented by the HP-28C
X! calculator. at refill
X
X Note: The current implementations of these functions with complex arguments
X are designed with proper behavior around the branch cuts in mind, @emph{not}
X***************
X*** 10025,10032 ****
X The @kbd{b t} (@code{calc-rotate-binary}) [@code{rot}] command rotates a
X number one bit to the left. The leftmost bit (according to the current
X word size) is dropped off the left and shifted in on the right. With a
X! numeric prefix argument, the number is rotated the specified number of
X! bits to the left or right.
X
X @node Matrix Functions, Graphics, Binary Functions, Top
X @chapter Vector and Matrix Functions
X--- 10102,10109 ----
X The @kbd{b t} (@code{calc-rotate-binary}) [@code{rot}] command rotates a
X number one bit to the left. The leftmost bit (according to the current
X word size) is dropped off the left and shifted in on the right. With a
X! numeric prefix argument, the number is rotated that many bits to the left
X! or right.
X
X @node Matrix Functions, Graphics, Binary Functions, Top
X @chapter Vector and Matrix Functions
X***************
X*** 10166,10192 ****
X (Interactively, just use @kbd{v b} twice: once to build a row, then again
X to build a matrix of copies of that row.)
X
X @pindex calc-head
X @pindex calc-tail
X @tindex head
X @tindex tail
X! The @code{calc-head} [@code{head}] function returns the first element
X! of a vector. The @code{calc-tail} [@code{tail}] function returns the
X! vector with its first element removed. In both cases, the argument
X! must be a non-empty vector.
X
X @pindex calc-cons
X @tindex cons
X! The @code{calc-cons} [@code{cons}] function takes a value @var{h} and a
X! vector @var{t} from the stack, and produces the vector whose head is
X @var{h} and whose tail is @var{t}. This is similar to @kbd{|}, except
X if @var{h} is itself a vector, @kbd{|} will concatenate the two vectors
X whereas @code{cons} will insert @var{h} at the front of the vector @var{t}.
X
X @tindex rhead
X @tindex rtail
X @tindex rcons
X! Each of these three functions also accepts the Inverse flag [@code{rhead},
X @code{rtail}, @code{rcons}] in which case @var{t} represents the
X @emph{last} element of the vector instead of the first, with @var{h}
X representing the remainder of the vector. Thus the vector
X--- 10243,10275 ----
X (Interactively, just use @kbd{v b} twice: once to build a row, then again
X to build a matrix of copies of that row.)
X
X+ @kindex v h
X+ @kindex I v h
X @pindex calc-head
X @pindex calc-tail
X @tindex head
X @tindex tail
X! The @kbd{v h} (@code{calc-head}) [@code{head}] function returns the first
X! element of a vector. The @kbd{I v h} (@code{calc-tail}) [@code{tail}]
X! function returns the vector with its first element removed. In both
X! cases, the argument must be a non-empty vector.
X
X+ @kindex v k
X @pindex calc-cons
X @tindex cons
X! The @kbd{v k} (@code{calc-cons}) [@code{cons}] function takes a value @var{h}
X! and a vector @var{t} from the stack, and produces the vector whose head is
X @var{h} and whose tail is @var{t}. This is similar to @kbd{|}, except
X if @var{h} is itself a vector, @kbd{|} will concatenate the two vectors
X whereas @code{cons} will insert @var{h} at the front of the vector @var{t}.
X
X+ @kindex H v h
X+ @kindex H I v h
X+ @kindex H v k
X @tindex rhead
X @tindex rtail
X @tindex rcons
X! Each of these three functions also accepts the Hyperbolic flag [@code{rhead},
X @code{rtail}, @code{rcons}] in which case @var{t} represents the
X @emph{last} element of the vector instead of the first, with @var{h}
X representing the remainder of the vector. Thus the vector
X***************
X*** 10439,10445 ****
X top of the stack; the mask and target vectors come from the third and
X second elements of the stack. This filler is used where the mask is
X zero: @samp{vexp([2, 0, 3, 0, 7], [a, b], z)} produces
X! @samp{[a, z, c, z, 7]}.
X
X Another variation on the masking idea is to combine @samp{[a, b, c, d, e]}
X with the mask @samp{[1, 0, 1, 0, 1]} to produce @samp{[a, 0, c, 0, e]}.
X--- 10522,10532 ----
X top of the stack; the mask and target vectors come from the third and
X second elements of the stack. This filler is used where the mask is
X zero: @samp{vexp([2, 0, 3, 0, 7], [a, b], z)} produces
X! @samp{[a, z, c, z, 7]}. If the filler value is itself a vector,
X! then successive values are taken from it, so that the effect is to
X! interleave two vectors according to the mask:
X! @samp{vexp([2, 0, 3, 7, 0, 0], [a, b], [x, y])} produces
X! @samp{[a, x, b, 7, y, 0]}.
X
X Another variation on the masking idea is to combine @samp{[a, b, c, d, e]}
X with the mask @samp{[1, 0, 1, 0, 1]} to produce @samp{[a, 0, c, 0, e]}.
X***************
X*** 10548,10554 ****
X objects. A set is a collection of objects; any given object can appear
X only once in the set. For efficiency Calc stores sets as vectors in
X sorted order. Objects in a Calc set can be any of the usual things,
X! such as numbers, variables, or formulas. Two set objects are considered
X equal if they are identical, except that numerically equal numbers like
X the integer 4 and the float 4.0 are considered equal even though they
X are not ``identical.''
X--- 10635,10641 ----
X objects. A set is a collection of objects; any given object can appear
X only once in the set. For efficiency Calc stores sets as vectors in
X sorted order. Objects in a Calc set can be any of the usual things,
X! such as numbers, variables, or formulas. Two set elements are considered
X equal if they are identical, except that numerically equal numbers like
X the integer 4 and the float 4.0 are considered equal even though they
X are not ``identical.''
X***************
X*** 10653,10662 ****
X list of all variables that appear in the formula, sorted into alphabetic
X order. For example, suppose you enter the formula @samp{x + 2y^x}.
X The default argument list would be @samp{(x y)}, which means that if
X! this function is applied to the arguments @samp{[3, 10]}, the result would
X be @samp{3 + 2*10^3}. If you plan to use a certain formula in this
X way often, you might consider defining it as a function with @kbd{Z F}.
X
X If you press @kbd{$} at the operator prompt, the effect is similar to
X the apostrophe except that the relevant formula is taken from top-of-stack
X instead. The actual vector argument of the @code{calc-apply} command is
X--- 10740,10756 ----
X list of all variables that appear in the formula, sorted into alphabetic
X order. For example, suppose you enter the formula @samp{x + 2y^x}.
X The default argument list would be @samp{(x y)}, which means that if
X! this function is applied to the arguments @samp{[3, 10]} the result will
X be @samp{3 + 2*10^3}. If you plan to use a certain formula in this
X way often, you might consider defining it as a function with @kbd{Z F}.
X
X+ Another way to specify the arguments to the formula you enter is with
X+ @kbd{$}, @kbd{$$}, and so on. For example, @kbd{V M ' $$ + 2$^$$}
X+ has the same effect as the previous example. The argument list is
X+ automatically taken to be @samp{($$ $)}. (The order of the arguments
X+ may seem backwards, but it is analogous to the way normal algebraic
X+ entry interacts with the stack.)
X+
X If you press @kbd{$} at the operator prompt, the effect is similar to
X the apostrophe except that the relevant formula is taken from top-of-stack
X instead. The actual vector argument of the @code{calc-apply} command is
X***************
X*** 10677,10685 ****
X derives from Lisp notation and the theory of functions. Note that there
X is no actual Calc function called @code{lambda}; the whole point is that
X the @code{lambda} expression is used in its symbolic form, not evaluated
X! for an answer.) (Actually, @code{lambda} does have one one special
X property: Its arguments are never evaluated; for example, putting
X! @samp{lambda(x, x*(2+3))} on the stack will not simplify the @samp{2+3}
X until the @code{lambda} is actually applied to some value of @samp{x}.)
X
X @kindex V R
X--- 10771,10779 ----
X derives from Lisp notation and the theory of functions. Note that there
X is no actual Calc function called @code{lambda}; the whole point is that
X the @code{lambda} expression is used in its symbolic form, not evaluated
X! for an answer.) (Actually, @code{lambda} does have one special
X property: Its arguments are never evaluated; for example, putting
X! @samp{lambda(x, x*(2/3))} on the stack will not simplify the @samp{2/3}
X until the @code{lambda} is actually applied to some value of @samp{x}.)
X
X @kindex V R
X***************
X*** 10739,10746 ****
X @tindex outer
X The @kbd{V O} (@code{calc-outer-product}) command applies a given binary
X operator to all possible pairs of elements from two vectors, to produce
X! a matrix. For example, @kbd{V O *} with @samp{[a, b]} and @samp{[x, y]}
X! on the stack produces a multiplication table @samp{[[a x, a y], [b x, b y]]}.
X
X @kindex V I
X @pindex calc-inner-product
X--- 10833,10843 ----
X @tindex outer
X The @kbd{V O} (@code{calc-outer-product}) command applies a given binary
X operator to all possible pairs of elements from two vectors, to produce
X! a matrix. For example, @kbd{V O *} with @samp{[a, b]} and @samp{[x, y, z]}
X! on the stack produces a multiplication table:
X! @samp{[[a x, a y, a z], [b x, b y, b z]]}. Element @var{r}, at var{c} of
X! the result matrix is obtained by applying the operator to element @var{r}
X! of the lefthand vector and element @var{c} of the righthand vector.
X
X @kindex V I
X @pindex calc-inner-product
X***************
X*** 10749,10760 ****
X inner product of two vectors or matrices, given a ``multiplicative''
X operator and an ``additive operator.'' These can each actually be any
X binary operators; if they are @samp{*} and @samp{+}, respectively, the
X! result is a standard matrix multiplication. Each element of the result
X! is obtained by mapping the multiplicative operator across a row of the
X! lefthand matrix and a column of the righthand matrix, and then reducing
X! with the additive operator. Just as for the standard @kbd{*} command,
X! this can also do a vector-matrix or matrix-vector inner product, or a
X! generalized dot product of two plain vectors.
X
X @tindex add
X @tindex sub
X--- 10846,10857 ----
X inner product of two vectors or matrices, given a ``multiplicative''
X operator and an ``additive operator.'' These can each actually be any
X binary operators; if they are @samp{*} and @samp{+}, respectively, the
X! result is a standard matrix multiplication. Element @var{r}, at var{c} of the
X! result matrix is obtained by mapping the multiplicative operator across
X! row @var{r} of the lefthand matrix and column @var{c} of the righthand
X! matrix, and then reducing with the additive operator. Just as for the
X! standard @kbd{*} command, this can also do a vector-matrix or matrix-vector
X! inner product, or a vector-vector generalized dot product.
X
X @tindex add
X @tindex sub
X***************
X*** 10767,10780 ****
X In algebraic formulas, these operations can be expressed as
X
X @example
X! apply(@var{oper}, @var{vec})
X! reduce(@var{oper}, @var{vec})
X! rreduce(@var{oper}, @var{vec})
X! accum(@var{oper}, @var{vec})
X! raccum(@var{oper}, @var{vec})
X! map(@var{oper}, @var{v1}, @var{v2}, ...)
X! outer(@var{oper}, @var{vec1}, @var{vec2})
X! inner(@var{mul-oper}, @var{add-oper}, @var{vec1}, @var{vec2})
X @end example
X
X For example, @samp{map(gcd, [10,20,30], x)}.
X--- 10864,10877 ----
X In algebraic formulas, these operations can be expressed as
X
X @example
X! V A apply(@var{oper}, @var{vec})
X! V R reduce(@var{oper}, @var{vec})
X! I V R rreduce(@var{oper}, @var{vec})
X! V U accum(@var{oper}, @var{vec})
X! I V U raccum(@var{oper}, @var{vec})
X! V M map(@var{oper}, @var{v1}, @var{v2}, ...)
X! V O outer(@var{oper}, @var{vec1}, @var{vec2})
X! V I inner(@var{mul-oper}, @var{add-oper}, @var{vec1}, @var{vec2})
X @end example
X
X For example, @samp{map(gcd, [10,20,30], x)}.
X***************
X*** 10850,10856 ****
X--- 10947,10957 ----
X @kbd{V M} or @kbd{V R}; elsewhere they have unrelated meanings
X (like @code{calc-algebraic-mode} for @kbd{m a}).
X
X+ For your convenience, mapping mode keys can be enter shifted or unshifted.
X+ Thus @kbd{V M M R +} maps addition by rows.
X+
X @kindex m e (mapping modes)
X+ @kindex M E (mapping modes)
X Use @kbd{m e} to select map-by-elements mode. In this mode, the operator
X is applied to each element of the argument matrix, or to corresponding
X elements of the argument matrices. For example, mapping by elements
X***************
X*** 10861,10866 ****
X--- 10962,10968 ----
X
X @tindex mapr
X @kindex m r (mapping modes)
X+ @kindex M R (mapping modes)
X Use @kbd{m r} to select map-by-rows mode. In this mode, the operator is
X applied to each row of the argument matrix, or to corresponding rows of
X the argument matrices. Rows are presented to the operator as plain vectors.
X***************
X*** 10872,10882 ****
X--- 10974,10986 ----
X
X @tindex mapc
X @kindex m c (mapping modes)
X+ @kindex M C (mapping modes)
X Use @kbd{m c} to select map-by-columns mode. Essentially, this transposes
X all matrix arguments, maps by rows, then transposes the result.
X
X @tindex mapa
X @kindex m a (mapping modes)
X+ @kindex M A (mapping modes)
X Use @kbd{m a} to select map-across mode. In this mode, the input is a
X single matrix with as many columns as the operator takes arguments.
X The columns of the matrix are treated as arguments in a regular vector
X***************
X*** 10885,10890 ****
X--- 10989,10995 ----
X
X @tindex mapd
X @kindex m d (mapping modes)
X+ @kindex M D (mapping modes)
X Use @kbd{m d} to select map-down mode. This mode is analogous to map-across,
X except that it treats the rows of the matrix as arguments to the mapping
X operation.
X***************
X*** 11001,11007 ****
X Trail. The @kbd{t y} (@code{calc-trail-yank}) command will be
X unable to recover those vectors. If you are working with very
X large vectors, this mode will improve the speed of all operations
X! that involve the trial.
X
X @kindex v /
X @pindex calc-break-vectors
X--- 11106,11112 ----
X Trail. The @kbd{t y} (@code{calc-trail-yank}) command will be
X unable to recover those vectors. If you are working with very
X large vectors, this mode will improve the speed of all operations
X! that involve the trail.
X
X @kindex v /
X @pindex calc-break-vectors
X***************
X*** 11017,11026 ****
X
X The commands for graphing data begin with the @kbd{g} prefix key.
X Calc uses GNUPLOT 2.0 to do graphics. These commands will only work
X! if GNUPLOT is available on your system. While GNUPLOT sounds like
X a relative of GNU Emacs, it is actually completely unrelated.
X However, it is free software and can be obtained from the Free
X! Software Foundation's machine @samp{prep.ai.mit.edu}.
X
X @vindex calc-gnuplot-name
X If you have GNUPLOT installed on your system but Calc is unable to
X--- 11122,11131 ----
X
X The commands for graphing data begin with the @kbd{g} prefix key.
X Calc uses GNUPLOT 2.0 to do graphics. These commands will only work
X! if GNUPLOT is available on your system. (While GNUPLOT sounds like
X a relative of GNU Emacs, it is actually completely unrelated.
X However, it is free software and can be obtained from the Free
X! Software Foundation's machine @samp{prep.ai.mit.edu}.)
X
X @vindex calc-gnuplot-name
X If you have GNUPLOT installed on your system but Calc is unable to
X***************
X*** 11027,11033 ****
X find it, you may need to set the @code{calc-gnuplot-name} variable
X in your @file{.emacs} file. You may also need to set some Lisp
X variables to show Calc how to run GNUPLOT on your system; these
X! are described at under @kbd{g D} and @kbd{g O} below. If you are
X using the X window system, Calc will configure GNUPLOT for you
X automatically.
X
X--- 11132,11138 ----
X find it, you may need to set the @code{calc-gnuplot-name} variable
X in your @file{.emacs} file. You may also need to set some Lisp
X variables to show Calc how to run GNUPLOT on your system; these
X! are described under @kbd{g D} and @kbd{g O} below. If you are
X using the X window system, Calc will configure GNUPLOT for you
X automatically.
X
X***************
X*** 11056,11068 ****
X Calc guesses at a reasonable number of data points to use. See the
X @kbd{g N} command below.
X
X! If ``y'' is a formula of the form @samp{xy(X, Y)}) then the result is a
X parametric plot. The two arguments of the fictitious @code{xy} function
X are used as the ``x'' and ``y'' coordinates of the curve, respectively.
X In this case the ``x'' vector or interval you specified is not directly
X visible in the graph. For example, if ``x'' is the interval @samp{[0..360]}
X and ``y'' is the formula @samp{xy(sin(t), cos(t))}, the resulting graph
X! will be a circle.
X
X Also, ``x'' and ``y'' may each be variable names, in which case Calc
X looks for suitable vectors, intervals, or formulas stored in those
X--- 11161,11174 ----
X Calc guesses at a reasonable number of data points to use. See the
X @kbd{g N} command below.
X
X! If ``y'' is a formula of the form @samp{xy(@var{x}, @var{y})}) then the
X! result is a
X parametric plot. The two arguments of the fictitious @code{xy} function
X are used as the ``x'' and ``y'' coordinates of the curve, respectively.
X In this case the ``x'' vector or interval you specified is not directly
X visible in the graph. For example, if ``x'' is the interval @samp{[0..360]}
X and ``y'' is the formula @samp{xy(sin(t), cos(t))}, the resulting graph
X! will be a circle. at refill
X
X Also, ``x'' and ``y'' may each be variable names, in which case Calc
X looks for suitable vectors, intervals, or formulas stored in those
X***************
X*** 11078,11084 ****
X @cindex @code{PlotRejects} variable
X If you store an empty vector in the variable @code{PlotRejects}
X (i.e., @kbd{[ ] s PlotRejects}), Calc will append information to
X! this record for every data point which was rejected because its
X ``x'' or ``y'' values were not real numbers. The result will be
X a matrix where each row holds the curve number, data point number,
X ``x'' value, and ``y'' value for a rejected data point.
X--- 11184,11190 ----
X @cindex @code{PlotRejects} variable
X If you store an empty vector in the variable @code{PlotRejects}
X (i.e., @kbd{[ ] s PlotRejects}), Calc will append information to
X! this vector for every data point which was rejected because its
X ``x'' or ``y'' values were not real numbers. The result will be
X a matrix where each row holds the curve number, data point number,
X ``x'' value, and ``y'' value for a rejected data point.
X***************
X*** 11147,11153 ****
X
X @kindex g j
X @pindex calc-graph-juggle
X! This @kbd{g j} (@code{calc-graph-juggle}) command moves the curve
X at the end of the list (the ``most recently added curve'') to the
X front of the list. The next-most-recent curve is thus exposed for
X @kbd{g d} or similar commands to use. With @kbd{g j} you can work
X--- 11253,11259 ----
X
X @kindex g j
X @pindex calc-graph-juggle
X! The @kbd{g j} (@code{calc-graph-juggle}) command moves the curve
X at the end of the list (the ``most recently added curve'') to the
X front of the list. The next-most-recent curve is thus exposed for
X @kbd{g d} or similar commands to use. With @kbd{g j} you can work
X***************
X*** 11164,11170 ****
X are then replaced by the file name in the template. The resulting
X plotting commands are fed to the GNUPLOT program. See the documentation
X for the GNUPLOT program for more specific information. All temporary
X! files are removed when plotting is finished.
X
X If you give a formula for ``y'', Calc will remember all the values that
X it calculates for the formula so that later plots can reuse these values.
X--- 11270,11276 ----
X are then replaced by the file name in the template. The resulting
X plotting commands are fed to the GNUPLOT program. See the documentation
X for the GNUPLOT program for more specific information. All temporary
X! files are removed when Emacs or GNUPLOT exits.
X
X If you give a formula for ``y'', Calc will remember all the values that
X it calculates for the formula so that later plots can reuse these values.
X***************
X*** 11223,11232 ****
X graphs that don't specify it explicitly.
X
X Data points in the graph of a function are normally computed to a
X! precision of five digits, regardless of the current precision at
X! the time. This is usually more than adequate, there are cases where
X it will not be. For example, plotting @samp{1 + x} for @samp{x} in the
X! interval @samp{[0 .. 1e-6]} will round all the data points down
X to 1.0! Putting the command @samp{set precision @var{n}} in the
X @samp{*Gnuplot Commands*} buffer will cause the data to be computed
X at precision @var{n} instead of 5. Since this is such a rare case,
X--- 11329,11338 ----
X graphs that don't specify it explicitly.
X
X Data points in the graph of a function are normally computed to a
X! precision of five digits, regardless of the current precision at the
X! time. This is usually more than adequate, but there are cases where
X it will not be. For example, plotting @samp{1 + x} for @samp{x} in the
X! interval @samp{[0 ..@: 1e-6]} will round all the data points down
X to 1.0! Putting the command @samp{set precision @var{n}} in the
X @samp{*Gnuplot Commands*} buffer will cause the data to be computed
X at precision @var{n} instead of 5. Since this is such a rare case,
X***************
X*** 11273,11279 ****
X default behavior of setting the range based on the range of values
X in the data, or @samp{$} to take the range from the top of the stack.
X Ranges on the stack can be represented as either interval forms or
X! vectors: @samp{[@var{min} .. @var{max}]} or @samp{[@var{min}, @var{max}]}.
X
X @kindex g l
X @kindex g L
X--- 11379,11385 ----
X default behavior of setting the range based on the range of values
X in the data, or @samp{$} to take the range from the top of the stack.
X Ranges on the stack can be represented as either interval forms or
X! vectors: @samp{[@var{min} ..@: @var{max}]} or @samp{[@var{min}, @var{max}]}.
X
X @kindex g l
X @kindex g L
X***************
X*** 11441,11447 ****
X algebraic formulas. First, the general sub-formula selection
X mechanism is described; this works in conjunction with any Calc
X commands. Then, commands for specific algebraic operations are
X! described. Finally, the flexiblr @dfn{rewrite rule} mechanism
X is discussed.
X
X The algebraic commands use the @kbd{a} key prefix; selection
X--- 11547,11553 ----
X algebraic formulas. First, the general sub-formula selection
X mechanism is described; this works in conjunction with any Calc
X commands. Then, commands for specific algebraic operations are
X! described. Finally, the flexible @dfn{rewrite rule} mechanism
X is discussed.
X
X The algebraic commands use the @kbd{a} key prefix; selection
X***************
X*** 12010,12022 ****
X selected term from one side of an equation to the other. Given
X @samp{a + b = c + d} with @samp{c} selected, the result is
X @samp{a + b - c = d}. This command also works if the selected
X! term is part of a @samp{*}, @samp{/}, or @samp{^} formula. If the
X! term you wish to move is neither the first nor the last term
X! of its sum or product, you may need to use @kbd{j L} or @kbd{j R}
X! first to move it to one end. The relevant rules variable is
X! @code{JumpRules}.
X
X @kindex j I
X @pindex calc-sel-isolate
X The @kbd{j I} (@code{calc-sel-isolate}) command isolates the
X selected term on its side of an equation. It uses the @kbd{a S}
X--- 12116,12126 ----
X selected term from one side of an equation to the other. Given
X @samp{a + b = c + d} with @samp{c} selected, the result is
X @samp{a + b - c = d}. This command also works if the selected
X! term is part of a @samp{*}, @samp{/}, or @samp{^} formula. The
X! relevant rules variable is @code{JumpRules}.
X
X @kindex j I
X+ @kindex H j I
X @pindex calc-sel-isolate
X The @kbd{j I} (@code{calc-sel-isolate}) command isolates the
X selected term on its side of an equation. It uses the @kbd{a S}
X***************
X*** 12199,12205 ****
X
X @kindex a b
X @pindex calc-substitute
X! The @kbd{a b} (@code{calc-substitute}) command substitutes occurrences
X of some variable or sub-expression of an expression with a new
X sub-expression. For example, substituting @samp{sin(x)} with @samp{cos(y)}
X in @samp{2 sin(x)^2 + x sin(x) + sin(2 x)} produces
X--- 12303,12309 ----
X
X @kindex a b
X @pindex calc-substitute
X! The @kbd{a b} (@code{calc-substitute}) command substitutes all occurrences
X of some variable or sub-expression of an expression with a new
X sub-expression. For example, substituting @samp{sin(x)} with @samp{cos(y)}
X in @samp{2 sin(x)^2 + x sin(x) + sin(2 x)} produces
X***************
X*** 12252,12258 ****
X derivative.
X
X If you use the @code{deriv} function directly in an algebraic formula,
X! you can also write @samp{deriv(f,x,x0)} which represents the derivative
X of @code{f} with respect to @code{x}, evaluated at the point @samp{x=x0}.
X
X If the formula being differentiated contains functions which Calc does
X--- 12356,12362 ----
X derivative.
X
X If you use the @code{deriv} function directly in an algebraic formula,
X! you can write @samp{deriv(f,x,x0)} which represents the derivative
X of @code{f} with respect to @code{x}, evaluated at the point @samp{x=x0}.
X
X If the formula being differentiated contains functions which Calc does
X***************
X*** 12282,12290 ****
X
X If you use the @code{integ} function directly in an algebraic formula,
X you can also write @samp{integ(f,x,v)} which expresses the resulting
X! indefinite integral in terms of variable @code{v} instead of @code{x},
X! or @samp{integ(f,x,a,b)}, which represents a definite integral from
X! @code{a} to @code{b}.
X
X The Calculator remembers all the integrals it has done. If conditions
X change in a way that would invalidate the old integrals, they will be
X--- 12386,12394 ----
X
X If you use the @code{integ} function directly in an algebraic formula,
X you can also write @samp{integ(f,x,v)} which expresses the resulting
X! indefinite integral in terms of variable @code{v} instead of @code{x}.
X! With four arguments, @samp{integ(f,x,a,b)} represents a definite integral
X! from @code{a} to @code{b}.
X
X The Calculator remembers all the integrals it has done. If conditions
X change in a way that would invalidate the old integrals, they will be
X***************
X*** 12613,12619 ****
X @kindex a !
X @pindex calc-logical-not
X @tindex lnot
X! The @kbd{a !} (@code{calc-logical-not}) [@samp{lnot(a)} or @samp{! a}]
X function is true if @samp{a} is false (zero), or false if @samp{a} is
X true (nonzero). It is left in symbolic form if @samp{a} is not a
X number.
X--- 12717,12723 ----
X @kindex a !
X @pindex calc-logical-not
X @tindex lnot
X! The @kbd{a !} (@code{calc-logical-not}) [@samp{lnot(a)} or @samp{!@: a}]
X function is true if @samp{a} is false (zero), or false if @samp{a} is
X true (nonzero). It is left in symbolic form if @samp{a} is not a
X number.
X***************
X*** 12622,12628 ****
X @pindex calc-logical-if
X @tindex if
X @cindex Arguments, not evaluated
X! The @kbd{a :} (@code{calc-logical-if}) [@samp{if(a,b,c)} or @samp{a ? b : c}]
X function is equal to either @samp{b} or @samp{c} if @samp{a} is a nonzero
X number or zero, respectively. If @samp{a} is not a number, the test is
X left in symbolic form and neither @samp{b} nor @samp{c} is evaluated in
X--- 12726,12732 ----
X @pindex calc-logical-if
X @tindex if
X @cindex Arguments, not evaluated
X! The @kbd{a :} (@code{calc-logical-if}) [@samp{if(a,b,c)} or @samp{a ? b :@: c}]
X function is equal to either @samp{b} or @samp{c} if @samp{a} is a nonzero
X number or zero, respectively. If @samp{a} is not a number, the test is
X left in symbolic form and neither @samp{b} nor @samp{c} is evaluated in
X***************
X*** 12670,12676 ****
X @end example
X
X Otherwise, @samp{a} is a formula, and the result is a variable which
X! represents name of the top-level function call.
X
X @tindex integer
X @tindex real
X--- 12774,12780 ----
X @end example
X
X Otherwise, @samp{a} is a formula, and the result is a variable which
X! represents the name of the top-level function call.
X
X @tindex integer
X @tindex real
X***************
X*** 12739,12745 ****
X one rule you can write it as a plain vector if you wish. (If the
X rewrite rule itself contains vectors, it's safest to enclose your
X rule in a surrounding vector to avoid ambiguity: @samp{[[[a,b], [b,a]]]}
X! is a rule that exchanges the two parts of a 2-vector. This is a pair
X of vectors for @samp{old} and @samp{new}, enclosed in brackets to
X make a rule, then enclosed again in brackets to make a rule set.)
X
X--- 12843,12849 ----
X one rule you can write it as a plain vector if you wish. (If the
X rewrite rule itself contains vectors, it's safest to enclose your
X rule in a surrounding vector to avoid ambiguity: @samp{[[[a,b], [b,a]]]}
X! is a rule that exchanges the parts of a 2-vector. This is a pair
X of vectors for @samp{old} and @samp{new}, enclosed in brackets to
X make a rule, then enclosed again in brackets to make a rule set.)
X
X***************
X*** 13096,13102 ****
X always simplify to a literal addition like @samp{f((-y) + x)}.
X
X @node Other Features of Rewrite Rules, Nested Formulas with Rewrite Rules, Algebraic Properties of Rewrite Rules, Rewrite Rules
X! @subsection Conditional Rewrite Rules
X
X Certain ``function names'' serve as markers in rewrite rules.
X Here is a complete list of these markers. First are listed the
X--- 13200,13206 ----
X always simplify to a literal addition like @samp{f((-y) + x)}.
X
X @node Other Features of Rewrite Rules, Nested Formulas with Rewrite Rules, Algebraic Properties of Rewrite Rules, Rewrite Rules
X! @subsection Other Features of Rewrite Rules
X
X Certain ``function names'' serve as markers in rewrite rules.
X Here is a complete list of these markers. First are listed the
X***************
X*** 13170,13176 ****
X @tindex condition
X This matches the pattern @samp{x}, with the attached condition
X @samp{c}. The rule @samp{[condition(f(n x), integer(n)), n f(x)]}
X! is functionally equivalent to @samp{[f(n x), n f(x), integer(n)]}.
X While it may seem more efficient to put the condition inside
X the rule as in @samp{f(condition(n,integer(n)) x)}, Calc is
X actually smart enough to test a condition as soon as all the
X--- 13274,13280 ----
X @tindex condition
X This matches the pattern @samp{x}, with the attached condition
X @samp{c}. The rule @samp{[condition(f(n x), integer(n)), n f(x)]}
X! is functionally equivalent to the rule @samp{[f(n x), n f(x), integer(n)]}.
X While it may seem more efficient to put the condition inside
X the rule as in @samp{f(condition(n,integer(n)) x)}, Calc is
X actually smart enough to test a condition as soon as all the
X***************
X*** 13256,13263 ****
X
X @item plain(x)
X Special properties of and simplifications for the function call
X! @samp{x} are not used. Meta-variables in the arguments of @samp{x}
X! are substituted as usual.
X
X @item cons(h,t)
X Where @samp{t} is a vector, this is converted into an expanded
X--- 13360,13371 ----
X
X @item plain(x)
X Special properties of and simplifications for the function call
X! @samp{x} are not used. One interesting case where @code{plain}
X! is useful is the rule, @samp{[q(x), quote(x)]}, trying to expand a
X! shorthand notation for the @code{quote} function. This rule will
X! not work as shown; instead of replacing @samp{q(foo)} with
X! @samp{quote(foo)}, it will replace it with @samp{foo}! The correct
X! rule would be @samp{[q(x), plain(quote(x))]}.
X
X @item cons(h,t)
X Where @samp{t} is a vector, this is converted into an expanded
X***************
X*** 13268,13275 ****
X have been turned off.
X
X @item rcons(t,h)
X! Analogous to @code{cons} except putting @code{h} at the @emph{end} of
X! the vector.
X
X @item apply(f,args)
X Where @samp{f} is a variable and @samp{args} is a vector, this
X--- 13376,13383 ----
X have been turned off.
X
X @item rcons(t,h)
X! Analogous to @code{cons} except putting @samp{h} at the @emph{end} of
X! the vector @samp{t}.
X
X @item apply(f,args)
X Where @samp{f} is a variable and @samp{args} is a vector, this
X***************
X*** 13293,13299 ****
X
X @item evalextsimp(x)
X @tindex evalextsimp
X! The formula @samp{x} has meta-variables substitited in the normal
X way, then ``extendedly'' simplified as if by the @kbd{a e} command.
X
X @item select(x)
X--- 13401,13407 ----
X
X @item evalextsimp(x)
X @tindex evalextsimp
X! The formula @samp{x} has meta-variables substituted in the normal
X way, then ``extendedly'' simplified as if by the @kbd{a e} command.
X
X @item select(x)
X***************
X*** 13437,13444 ****
X @samp{select( )} calls in rewrite rules. For example, if you used the
X above rule @samp{[select(a)^x, select(a)]} with @kbd{a r}, it would apply
X the rule as if it were @samp{[a^x, a]}. Thus, you can write general
X! purpose rules that include @samp{select( )} hints inside them so
X! that they will ``do the right thing'' in both @kbd{a r} and @kbd{j r},
X both with and without selections.
X
X @node Matching Commands, Examples of Rewrite Rules, Selections with Rewrite Rules, Rewrite Rules
X--- 13545,13552 ----
X @samp{select( )} calls in rewrite rules. For example, if you used the
X above rule @samp{[select(a)^x, select(a)]} with @kbd{a r}, it would apply
X the rule as if it were @samp{[a^x, a]}. Thus, you can write general
X! purpose rules with @samp{select( )} hints inside them so that they
X! will ``do the right thing'' in both @kbd{a r} and @kbd{j r},
X both with and without selections.
X
X @node Matching Commands, Examples of Rewrite Rules, Selections with Rewrite Rules, Rewrite Rules
X***************
X*** 13452,13458 ****
X vector of patterns, or a variable which contains patterns, or
X you can give a blank response in which case the patterns are taken
X from the top of the stack. The pattern set will be compiled once
X! and saved if it is stored in a variable.
X
X For example, @samp{match(a+b, [x, x+y, x-y, 7, x+y+z])}
X will return @samp{[x+y, x-y, x+y+z]}.
X--- 13560,13568 ----
X vector of patterns, or a variable which contains patterns, or
X you can give a blank response in which case the patterns are taken
X from the top of the stack. The pattern set will be compiled once
X! and saved if it is stored in a variable. If there are several
X! patterns in the set, vector elements are kept if they match any
X! of the patterns.
X
X For example, @samp{match(a+b, [x, x+y, x-y, 7, x+y+z])}
X will return @samp{[x+y, x-y, x+y+z]}.
X***************
X*** 13829,13835 ****
X will be left alone even if you press @kbd{=} (@code{calc-evaluate}).
X To return a variable to the void state, use @code{calc-unstore}. An
X easy keyboard shortcut for this command is @kbd{s} (@code{calc-store})
X! with any numeric prefix argument: @kbd{C-u s foo @key{RET}}
X This form does not use the value on
X the top of the stack; it simply removes any value that may already be
X defined for the specified variable. at refill
X--- 13939,13945 ----
X will be left alone even if you press @kbd{=} (@code{calc-evaluate}).
X To return a variable to the void state, use @code{calc-unstore}. An
X easy keyboard shortcut for this command is @kbd{s} (@code{calc-store})
X! with any numeric prefix argument: @kbd{C-u s foo @key{RET}}.
X This form does not use the value on
X the top of the stack; it simply removes any value that may already be
X defined for the specified variable. at refill
X***************
X*** 13992,13998 ****
X command works successfully, it does an automatic @kbd{M-x calc} to enter
X the Calculator buffer.
X
X! The @kbd{M-#} key with a prefix argument of -1 as in (@kbd{M-- M-#}) is
X equivalent to @code{calc-grab-region} (with no prefix argument).
X
X Each line of the grabbed area becomes a row of the matrix. The result
X--- 14102,14108 ----
X command works successfully, it does an automatic @kbd{M-x calc} to enter
X the Calculator buffer.
X
X! The @kbd{M-#} key with a prefix argument of -1 (as in @kbd{M-- M-#}) is
X equivalent to @code{calc-grab-region} (with no prefix argument).
X
X Each line of the grabbed area becomes a row of the matrix. The result
X***************
X*** 14031,14037 ****
X mode, the region is never interpreted as a rectangle.
X
X If a different language has been specified (@pxref{Language Modes}),
X! the grabbed text will be interpreted according to the that language.
X
X @xref{Matrix Functions}, to see how to pull the matrix apart into its
X constituent rows and columns. (If it is a 1x1 matrix, just hit @kbd{v u}
X--- 14141,14147 ----
X mode, the region is never interpreted as a rectangle.
X
X If a different language has been specified (@pxref{Language Modes}),
X! the grabbed text will be interpreted according to that language.
X
X @xref{Matrix Functions}, to see how to pull the matrix apart into its
X constituent rows and columns. (If it is a 1x1 matrix, just hit @kbd{v u}
X***************
X*** 14041,14047 ****
X wish to sum. Go to one corner of the column and press @kbd{C-@@} to
X set the mark; go to the other corner and type @kbd{M-x calc-grab-region}.
X This will grab the column of numbers into the calculator in the form
X! of column matrix. Press @kbd{v t} to transpose this into a row matrix.
X Press @kbd{v u} to unpack this into a simple vector. (Recall, a one-row
X matrix is a vector of a single vector.) Then, type @kbd{V R +} to
X compute the sum.
X--- 14151,14157 ----
X wish to sum. Go to one corner of the column and press @kbd{C-@@} to
X set the mark; go to the other corner and type @kbd{M-x calc-grab-region}.
X This will grab the column of numbers into the calculator in the form
X! of a column matrix. Press @kbd{v t} to transpose this into a row matrix.
X Press @kbd{v u} to unpack this into a simple vector. (Recall, a one-row
X matrix is a vector of a single vector.) Then, type @kbd{V R +} to
X compute the sum.
X***************
X*** 14231,14237 ****
X performing their usual functions. Press @kbd{C-x )} to end recording.
X Press shift- at kbd{K} (or the standard Emacs key sequence @kbd{C-x e}) to
X execute your keyboard macro by replaying the recorded keystrokes.
X! @xref{Keyboard Macros, , , emacs, the Emacs manual}, for further
X information. at refill
X
X When you use @kbd{K} to invoke a keyboard macro, the entire macro is
X--- 14341,14347 ----
X performing their usual functions. Press @kbd{C-x )} to end recording.
X Press shift- at kbd{K} (or the standard Emacs key sequence @kbd{C-x e}) to
X execute your keyboard macro by replaying the recorded keystrokes.
X! @xref{Keyboard Macros, , , emacs, the Emacs Manual}, for further
X information. at refill
X
X When you use @kbd{K} to invoke a keyboard macro, the entire macro is
X***************
X*** 14333,14345 ****
X tests which conveniently produce 1 for true and 0 for false.
X
X For example, @kbd{@key{RET} 0 a < Z [ n Z ]} implements an absolute-value
X! function as a keyboard macro. To program this macro, type @kbd{C-x (},
X type the above sequence of keystrokes, then type @kbd{C-x )}. Note that
X the keystrokes will be executed while you are making the definition as
X well as when you later re-execute the macro by typing @kbd{K}. Thus you
X should make sure a suitable number is on the stack before defining the
X macro to make sure you don't get a stack-underflow error during the
X! definition process.
X
X The above macro duplicates the number on the top of the stack, pushes
X zero and compares using @kbd{a <} (@code{calc-less-than}), then, if
X--- 14443,14456 ----
X tests which conveniently produce 1 for true and 0 for false.
X
X For example, @kbd{@key{RET} 0 a < Z [ n Z ]} implements an absolute-value
X! function in the form of a keyboard macro. To program this macro, type
X! @kbd{C-x (},
X type the above sequence of keystrokes, then type @kbd{C-x )}. Note that
X the keystrokes will be executed while you are making the definition as
X well as when you later re-execute the macro by typing @kbd{K}. Thus you
X should make sure a suitable number is on the stack before defining the
X macro to make sure you don't get a stack-underflow error during the
X! definition process. at refill
X
X The above macro duplicates the number on the top of the stack, pushes
X zero and compares using @kbd{a <} (@code{calc-less-than}), then, if
X***************
X*** 14525,14530 ****
X--- 14636,14648 ----
X be when you invoke your macro, it's best to use prefix arguments
X for all mode-setting commands inside the macro.
X
X+ In fact, @kbd{C-u Z `} is like @kbd{Z `} except that it sets the modes
X+ listed above to their default values. As usual, the matching @kbd{Z '}
X+ will restore the modes to their settings from before the @kbd{C-u Z `}.
X+ Also, @kbd{Z `} with a negative prefix argument resets the mapping
X+ direction and algebraic mode to their defaults but leaves the other
X+ modes the same as their values outside the construct.
X+
X The contents of the stack and trail, values of non-quick variables, and
X other settings such as the language mode and the various display modes,
X are @emph{not} affected by @kbd{Z `} and @kbd{Z '}.
X***************
X*** 14548,14554 ****
X This command allows your keyboard macros to accept numbers or formulas
X as interactive input. All the normal conventions of algebraic input,
X including the use of @kbd{$} characters, are supported.
X! @xref{Kbd Macro Query, , , emacs, the Emacs manual}, for a description of
X @kbd{C-x q} (@code{kbd-macro-query}), the standard Emacs way to accept
X keyboard input during a keyboard macro. In particular, you can use
X @kbd{C-x q} to enter a recursive edit, which allows the user to perform
X--- 14666,14672 ----
X This command allows your keyboard macros to accept numbers or formulas
X as interactive input. All the normal conventions of algebraic input,
X including the use of @kbd{$} characters, are supported.
X! @xref{Kbd Macro Query, , , emacs, the Emacs Manual}, for a description of
X @kbd{C-x q} (@code{kbd-macro-query}), the standard Emacs way to accept
X keyboard input during a keyboard macro. In particular, you can use
X @kbd{C-x q} to enter a recursive edit, which allows the user to perform
X***************
X*** 15058,15063 ****
X--- 15176,15182 ----
X @var{body})
X @end example
X
X+ @noindent
X where each @var{param} is either a symbol or a list of the form
X
X @example
X***************
X*** 15412,15418 ****
X @subsubsection Keyboard Macros
X
X If the separator symbol is @code{macro}, the first argument must be a
X! string of characters which Calc executes as a sequence of keystroke.
X This switches into the Calc buffer for the duration of the macro.
X For example, @samp{(calc-eval "vx5\rVR+" 'macro)} pushes the
X vector @samp{[1,2,3,4,5]} on the stack and then replaces it
X--- 15531,15537 ----
X @subsubsection Keyboard Macros
X
X If the separator symbol is @code{macro}, the first argument must be a
X! string of characters which Calc can execute as a sequence of keystrokes.
X This switches into the Calc buffer for the duration of the macro.
X For example, @samp{(calc-eval "vx5\rVR+" 'macro)} pushes the
X vector @samp{[1,2,3,4,5]} on the stack and then replaces it
X***************
X*** 15503,15510 ****
X which is not a Lisp list.
X
X Large integers are stored as a list of the form @samp{(bigpos @var{d0}
X! @var{d1} @var{d2} @dots{}} for positive integers 1000000 or more, or
X! @samp{(bigneg @var{d0} @var{d1} @var{d2} @dots{}} for negative integers
X -1000000 or less. Each @var{d} is a base-1000 ``digit,'' a Lisp integer
X from 0 to 999. The least significant digit is @var{d0}; the last digit,
X @var{dn}, which is always nonzero, is the most significant digit. For
X--- 15622,15629 ----
X which is not a Lisp list.
X
X Large integers are stored as a list of the form @samp{(bigpos @var{d0}
X! @var{d1} @var{d2} @dots{})} for positive integers 1000000 or more, or
X! @samp{(bigneg @var{d0} @var{d1} @var{d2} @dots{})} for negative integers
X -1000000 or less. Each @var{d} is a base-1000 ``digit,'' a Lisp integer
X from 0 to 999. The least significant digit is @var{d0}; the last digit,
X @var{dn}, which is always nonzero, is the most significant digit. For
X***************
X*** 15544,15551 ****
X Polar complex numbers are stored in the form @samp{(polar @var{r}
X @var{theta})}, where @var{r} is a positive real value and @var{theta}
X is a real value or HMS form representing an angle. This angle is
X! usually normalized to lie in the interval @samp{(-180 .. 180)} degrees,
X! or @samp{(-pi .. pi)} radians, according to the current angular mode.
X If the angle is 0 the value is converted to a real number automatically.
X (If the angle is 180 degrees, the value is usually also converted to a
X negative real number.)@refill
X--- 15663,15670 ----
X Polar complex numbers are stored in the form @samp{(polar @var{r}
X @var{theta})}, where @var{r} is a positive real value and @var{theta}
X is a real value or HMS form representing an angle. This angle is
X! usually normalized to lie in the interval @samp{(-180 ..@: 180)} degrees,
X! or @samp{(-pi ..@: pi)} radians, according to the current angular mode.
X If the angle is 0 the value is converted to a real number automatically.
X (If the angle is 180 degrees, the value is usually also converted to a
X negative real number.)@refill
X***************
X*** 15553,15564 ****
X Hours-minutes-seconds forms are stored as @samp{(hms @var{h} @var{m}
X @var{s})}, where @var{h} is an integer or an integer-valued float (i.e.,
X a float with @samp{@var{exp} >= 0}), @var{m} is an integer or integer-valued
X! float in the range @samp{[0 .. 60)}, and @var{s} is any real number in the
X! range @samp{[0 .. 60)}. at refill
X
X Modulo forms are stored as @samp{(mod @var{n} @var{m})}, where @var{m} is a
X positive real number or HMS form, and @var{n} is a real number or HMS
X! form in the range @samp{[0 .. @var{m})}.
X
X Error forms are stored as @samp{(sdev @var{x} @var{sigma})}, where @var{x}
X is the mean value and @var{sigma} is the standard deviation. Each
X--- 15672,15683 ----
X Hours-minutes-seconds forms are stored as @samp{(hms @var{h} @var{m}
X @var{s})}, where @var{h} is an integer or an integer-valued float (i.e.,
X a float with @samp{@var{exp} >= 0}), @var{m} is an integer or integer-valued
X! float in the range @samp{[0 ..@: 60)}, and @var{s} is any real number in the
X! range @samp{[0 ..@: 60)}. at refill
X
X Modulo forms are stored as @samp{(mod @var{n} @var{m})}, where @var{m} is a
X positive real number or HMS form, and @var{n} is a real number or HMS
X! form in the range @samp{[0 ..@: @var{m})}.
X
X Error forms are stored as @samp{(sdev @var{x} @var{sigma})}, where @var{x}
X is the mean value and @var{sigma} is the standard deviation. Each
X***************
X*** 17405,17411 ****
X @node Installation, Reporting Bugs, Programming, Top
X @chapter Installation
X
X! Calc 1.06 comes as a pair of Emacs Lisp files, generally called
X @file{calc.el} and @file{calc-ext.el}. The first contains the basic
X foundations of the Calculator, and is as small as possible to promote
X quick loading. The second contains all the more advanced commands and
X--- 17524,17530 ----
X @node Installation, Reporting Bugs, Programming, Top
X @chapter Installation
X
X! Calc 1.07 comes as a pair of Emacs Lisp files, generally called
X @file{calc.el} and @file{calc-ext.el}. The first contains the basic
X foundations of the Calculator, and is as small as possible to promote
X quick loading. The second contains all the more advanced commands and
X***************
X*** 17446,17452 ****
X Test your installation as described at the end of these instructions.
X
X @item
X! (Optional.) To print a hardcopy of the Calc manual (about 300 pages),
X move to the Calc home directory and type @file{tex calc.texinfo},
X then @file{texindex calc.??}, then @file{tex calc.texinfo} again.
X Now print the resulting @file{calc.dvi} file using whatever command
X--- 17565,17571 ----
X Test your installation as described at the end of these instructions.
X
X @item
X! (Optional.) To print a hardcopy of the Calc manual (about 350 pages),
X move to the Calc home directory and type @file{tex calc.texinfo},
X then @file{texindex calc.??}, then @file{tex calc.texinfo} again.
X Now print the resulting @file{calc.dvi} file using whatever command
X***************
X*** 17499,17510 ****
X @end example
X
X where @file{.../calc.elc} represents the full path to the @file{calc.elc}
X! file, and similarly for @file{.../calc-ext.elc}. If you have installed
X these files in Emacs' main @file{lisp/} directory, you can just write
X @samp{"calc.elc"} and @samp{"calc-ext.elc"}. If you have used the
X @code{calc-install} method and the home directory you chose is called,
X say, @file{/usr/gnu/src/calc}, then you would need to write
X! @samp{"/usr/gnu/src/calc/calc.elc"} and similarly for @samp{calc-ext.elc}.
X
X The @code{autoload} command for @code{calc} is what loads @file{calc.elc}
X when you type @kbd{M-x calc}. The @code{autoload} for @code{calc-extensions}
X--- 17618,17632 ----
X @end example
X
X where @file{.../calc.elc} represents the full path to the @file{calc.elc}
X! file, and similarly for the file @file{.../calc-ext.elc}.
X! If you have installed
X these files in Emacs' main @file{lisp/} directory, you can just write
X @samp{"calc.elc"} and @samp{"calc-ext.elc"}. If you have used the
X @code{calc-install} method and the home directory you chose is called,
X say, @file{/usr/gnu/src/calc}, then you would need to write
X! @c the full pathname
X! @samp{"/usr/gnu/src/calc/calc.elc"} and similarly for
X! @samp{calc-ext.elc}. at refill
X
X The @code{autoload} command for @code{calc} is what loads @file{calc.elc}
X when you type @kbd{M-x calc}. The @code{autoload} for @code{calc-extensions}
X***************
X*** 17538,17550 ****
X inserts the necessary @code{autoload} commands into @file{calc.el} and
X the @file{calc-ext.el} to refer to the parts of them that were moved
X to other files. These @code{autoload} commands point to the directory
X! you did your @code{calc-install} in, so if you move Calc to a new home
X! you'll have to do the @code{calc-install} over again there.
X Note that you will still need to install the @code{autoload} commands
X shown above so that Emacs can find the two main Calc files. at refill
X
X The @code{calc-install} command also formats the manual, assuming
X! you have placed @file{calc.texinfo} in the same directory.
X
X If you'd rather split and compile the Calculator from the Unix shell
X or a Makefile, you can use the command
X--- 17660,17681 ----
X inserts the necessary @code{autoload} commands into @file{calc.el} and
X the @file{calc-ext.el} to refer to the parts of them that were moved
X to other files. These @code{autoload} commands point to the directory
X! you did your @code{calc-install} in.
X Note that you will still need to install the @code{autoload} commands
X shown above so that Emacs can find the two main Calc files. at refill
X
X+ The Lisp variable @code{calc-autoload-directory} can be set to a
X+ directory name, including the trailing @samp{/}, which the @code{autoload}
X+ commands should use instead of the original installation directory.
X+ Calc examines this variable when it is loaded, so you can set it in
X+ your @file{.emacs} or @file{default} file if you move Calc after
X+ you have done your @code{calc-install}. Note that this applies
X+ only to the @code{autoload} commands created by the splitting
X+ procedure; you will have to change the ones you wrote yourself
X+ by hand.
X+
X The @code{calc-install} command also formats the manual, assuming
X! you have placed the file @file{calc.texinfo} in the same directory.
X
X If you'd rather split and compile the Calculator from the Unix shell
X or a Makefile, you can use the command
X***************
X*** 17650,17656 ****
X to save. The result will be a collection of files whose names begin
X with @file{calc-info}. The @code{calc-install} command does this for you.
X You can also format this into a printable document using @TeX{},
X! but beware, the manual is almost 300 printed pages!
X
X @vindex calc-info-filename
X There is a Lisp variable called @code{calc-info-filename} which holds
X--- 17781,17787 ----
X to save. The result will be a collection of files whose names begin
X with @file{calc-info}. The @code{calc-install} command does this for you.
X You can also format this into a printable document using @TeX{},
X! but beware, the manual is over 300 printed pages!
X
X @vindex calc-info-filename
X There is a Lisp variable called @code{calc-info-filename} which holds
X***************
X*** 17692,17698 ****
X Finally, press @kbd{M-#} again to make sure the Calculator can exit.
X
X You may also wish to test the GNUPLOT interface; to plot a sine wave,
X! type @kbd{' [0 .. 360], sin(x) RET g f}.
X
X
X (The above text is included in both the Calc documentation and the
X--- 17823,17829 ----
X Finally, press @kbd{M-#} again to make sure the Calculator can exit.
X
X You may also wish to test the GNUPLOT interface; to plot a sine wave,
X! type @kbd{' [0 ..@: 360], sin(x) RET g f}.
X
X
X (The above text is included in both the Calc documentation and the
XFiles macedit.el and ../dist/macedit.el are identical
SHAR_EOF
chmod 0666 calc.patch || echo "restore of calc.patch fails"
rm -f s2_seq_.tmp
echo "You have unpacked the last part"
exit 0
--
Dave Gillespie
256-80 Caltech Pasadena CA USA 91125
daveg at csvax.cs.caltech.edu, ...!cit-vax!daveg
More information about the Comp.sources.bugs
mailing list