Fix bug #1848: taytorat leaks internal gensyms from multivar expansions
[maxima.git] / doc / info / opsubst.texi
blob2cdcfb869f2635770b15dfcf9dfa4d6b2e52eec4
1 @menu
2 * Functions and Variables for opsubst::
3 @end menu
5 @node Functions and Variables for opsubst,  , opsubst-pkg, opsubst-pkg
6 @section Functions and Variables for opsubst
8 @anchor{opsubst_func}
9 @deffn {Function} opsubst @
10 @fname{opsubst} (@var{f},@var{g},@var{e}) @
11 @fname{opsubst} (@var{g}=@var{f},@var{e}) @
12 @fname{opsubst} ([@var{g1}=@var{f1},@var{g2}=@var{f2},..., @var{gn}=@var{fn}],@var{e})
13 The function @code{opsubst} is similar to the function @code{subst}, except that
14 @code{opsubst} only makes substitutions for the operators in an expression. In general, 
15 When @var{f} is an operator in the expression @var{e}, substitute @var{g} 
16 for @var{f} in the expression @var{e}.
18 To determine the operator, @code{opsubst} sets @code{inflag} to true. This means 
19 @code{opsubst} substitutes for the internal, not the displayed, operator
20 in the expression.
22 Examples:
23 @example
24 (%i1) load ("opsubst")$
26 (%i2) opsubst(f,g,g(g(x)));
27 (%o2)                     f(f(x))
28 (%i3) opsubst(f,g,g(g));
29 (%o3)                       f(g)
30 (%i4) opsubst(f,g[x],g[x](z));
31 (%o4)                       f(z)
32 (%i5) opsubst(g[x],f, f(z));
33 (%o5)                      g (z)
34                             x
35 (%i6) opsubst(tan, sin, sin(sin));
36 (%o6)                     tan(sin)
37 (%i7) opsubst([f=g,g=h],f(x));
38 (%o7)                       h(x)
39 @end example
41 Internally, Maxima does not use the unary negation,
42 division, or the subtraction operators; thus:
43 @example
44 (%i8) opsubst("+","-",a-b);
45 (%o8)                     a - b
46 (%i9) opsubst("f","-",-a);
47 (%o9)                      - a
48 (%i10) opsubst("^^","/",a/b);
49                              a
50 (%o10)                       -
51                              b
52 @end example
54 The internal representation of -a*b is *(-1,a,b); thus
55 @example
56 (%i11) opsubst("[","*", -a*b);
57 (%o11)                  [- 1, a, b]
58 @end example
60 When either operator isn't a Maxima symbol, generally some other function
61 will signal an error:
62 @example
63 (%i12) opsubst(a+b,f, f(x));
65 Improper name or value in functional position:
66 b + a
67  -- an error.  Quitting.  To debug this try debugmode(true);
68 @end example
70 However, subscripted operators are allowed:
71 @example
72 (%i13) opsubst(g[5],f, f(x));
73 (%o13)                     g (x)
74                             5
75 @end example
77 To use this function write first @code{load("opsubst")}.
79 @opencatbox{Categories:}
80 @category{Expressions}
81 @category{Share packages}
82 @category{Package opsubst}
83 @closecatbox
85 @end deffn