.BI expand( expression )
\- expands an expression
.br
-.BI find( expression ", " expression )
+.BI find( expression ", " pattern )
\- returns a list of all occurrences of a pattern in an expression
.br
.BI gcd( expression ", " expression )
\- greatest common divisor
.br
-.BI has( expression ", " expression )
-\- returns "1" if the first expression contains the second (which may contain wildcards) as a subexpression, "0" otherwise
+.BI has( expression ", " pattern )
+\- returns "1" if the first expression contains the pattern as a subexpression, "0" otherwise
.br
.BI inverse( matrix )
\- inverse of a matrix
.BI lsolve( equation-list ", " symbol-list )
\- solve system of linear equations
.br
+.BI map( expression ", " pattern )
+\- apply function to each operand; the function to be applied is specified as a pattern with the "$0" wildcard standing for the operands
+.br
.BI match( expression ", " pattern )
\- check whether expression matches a pattern; returns a list of wildcard substitutions or "FAIL" if there is no match
.br
return (bool)ex_to<relational>(e[0]) ? ex(1) : ex(0);
}
+class apply_map_function : public map_function {
+ ex apply;
+public:
+ apply_map_function(const ex & a) : apply(a) {}
+ ex operator()(const ex & e) { return apply.subs(wild() == e, true); }
+};
+
+static ex f_map(const exprseq &e)
+{
+ apply_map_function fcn(e[1]);
+ return e[0].map(fcn);
+}
+
static ex f_match(const exprseq &e)
{
lst repl_lst;
{"lcoeff", fcn_desc(f_lcoeff, 2)},
{"ldegree", fcn_desc(f_ldegree, 2)},
{"lsolve", fcn_desc(f_lsolve, 2)},
+ {"map", fcn_desc(f_map, 2)},
{"match", fcn_desc(f_match, 2)},
{"nops", fcn_desc(f_nops, 1)},
{"normal", fcn_desc(f_normal1, 1)},