X-Git-Url: https://www.ginac.de/ginac.git//ginac.git?p=ginac.git;a=blobdiff_plain;f=ginsh%2Fginsh_parser.yy;h=16601cee15d2e6792ec74446bcc37f77a5a6e070;hp=a94b92c775b1b71ec20178bdb3d8fcb65f18846e;hb=69ec860812569dbbfb9216907abbd22ff36ce54f;hpb=b6e3c62f240698c7e9ed464c57bb6d92741765ba diff --git a/ginsh/ginsh_parser.yy b/ginsh/ginsh_parser.yy index a94b92c7..16601cee 100644 --- a/ginsh/ginsh_parser.yy +++ b/ginsh/ginsh_parser.yy @@ -394,6 +394,19 @@ static ex f_is(const exprseq &e) return (bool)ex_to(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; @@ -526,6 +539,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)},