package expression.common; import base.Functional; import base.Pair; import java.util.List; import java.util.function.BiFunction; import java.util.function.Function; /** * @author Georgiy Korneev (kgeorgiy@kgeorgiy.info) */ public record Expr(Node node, List> variables) { public List> variables(final BiFunction f) { return Functional.map( variables, variable -> variable.second(f.apply(variable.first(), variable.second())) ); } public Expr convert(final BiFunction f) { return of(node, variables(f)); } public Expr node(final Function, Node> f) { return of(f.apply(node), variables); } public static Expr of(final Node node, final List> variables) { return new Expr<>(node, variables); } }