Class UnchainingRewriteRule

java.lang.Object
com.singularsys.extensions.rewrite.AbstractRewrite
com.singularsys.extensions.chained.UnchainingRewriteRule
All Implemented Interfaces:
RewriteRuleI, JepComponent, Serializable

public class UnchainingRewriteRule extends AbstractRewrite
A rule which transforms a chain of functions into a nested function calls. For example [1..5] . map(x=>x^2) . last() will be transformed to last(map(x=>x^2, [1..5])). To use:
var rw = new RewriteVisitor();
rw.add(new UnchainingRewriteRule());
rw.init(jep);
OverloadResolver or = new OverloadResolver();
or.init(jep);

Node node = jep.parse("[1..5] . map(x=>x^2) . last()");
or.visit(node);
Node rewritten = rw.rewrite(node,false);
Object result = jep.evaluate(rewritten);
Calling the OverloadResolver before the rewrite is necessary resolve the overloaded dot operator and convert functions implementing ChainableBinaryFunction in ChainedBinaryFunction and similar for other types. Using these two operators will slightly speed up evaluation times.
Since:
Jep 4.1
See Also: