]> www.ginac.de Git - ginac.git/blobdiff - ginsh/ginsh_parser.yy
- added fderivative class to archive exam
[ginac.git] / ginsh / ginsh_parser.yy
index 10383e8eb3fc81b05fa3f36d7c898fe6f9b01fef..bca29dd53a28a54d797e3a33bfd663a75cc72c72 100644 (file)
@@ -375,6 +375,13 @@ static ex f_evalf2(const exprseq &e)
        return e[0].evalf(ex_to<numeric>(e[1]).to_int());
 }
 
+static ex f_find(const exprseq &e)
+{
+       lst found;
+       e[0].find(e[1], found);
+       return found;
+}
+
 static ex f_inverse(const exprseq &e)
 {
        CHECK_ARG(0, matrix, inverse);
@@ -387,6 +394,20 @@ static ex f_is(const exprseq &e)
        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) {}
+       virtual ~apply_map_function() {}
+       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;
@@ -510,6 +531,7 @@ static const fcn_init builtin_fcns[] = {
        {"evalf", fcn_desc(f_evalf2, 2)},
        {"evalm", fcn_desc(f_evalm, 1)},
        {"expand", fcn_desc(f_expand, 1)},
+       {"find", fcn_desc(f_find, 2)},
        {"gcd", fcn_desc(f_gcd, 2)},
        {"has", fcn_desc(f_has, 2)},
        {"inverse", fcn_desc(f_inverse, 1)},
@@ -518,6 +540,7 @@ static const fcn_init builtin_fcns[] = {
        {"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)},