1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.createLeafCount = void 0;
- var _factory = require("../../utils/factory.js");
- var name = 'leafCount';
- var dependencies = ['parse', 'typed'];
- var createLeafCount = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
- var parse = _ref.parse,
- typed = _ref.typed;
- // This does the real work, but we don't have to recurse through
- // a typed call if we separate it out
- function countLeaves(node) {
- var count = 0;
- node.forEach(function (n) {
- count += countLeaves(n);
- });
- return count || 1;
- }
- /**
- * Gives the number of "leaf nodes" in the parse tree of the given expression
- * A leaf node is one that has no subexpressions, essentially either a
- * symbol or a constant. Note that `5!` has just one leaf, the '5'; the
- * unary factorial operator does not add a leaf. On the other hand,
- * function symbols do add leaves, so `sin(x)/cos(x)` has four leaves.
- *
- * The `simplify()` function should generally not increase the `leafCount()`
- * of an expression, although currently there is no guarantee that it never
- * does so. In many cases, `simplify()` reduces the leaf count.
- *
- * Syntax:
- *
- * leafCount(expr)
- *
- * Examples:
- *
- * math.leafCount('x') // 1
- * math.leafCount(math.parse('a*d-b*c')) // 4
- * math.leafCount('[a,b;c,d][0,1]') // 6
- *
- * See also:
- *
- * simplify
- *
- * @param {Node|string} expr The expression to count the leaves of
- *
- * @return {number} The number of leaves of `expr`
- *
- */
- return typed(name, {
- Node: function Node(expr) {
- return countLeaves(expr);
- }
- });
- });
- exports.createLeafCount = createLeafCount;
|