Expand description
The registry of library special functions, the nodes
ExprNode::Lib.
Elementary functions (sin, exp, gamma, erf, …) are dedicated
ExprNode variants. The larger family of special functions — Bessel,
orthogonal polynomials, incomplete gamma, elliptic integrals, the integer
sequences — is stored as Lib(LibFn, args). LibFn is the closed
list of those functions, so a consumer that matches on it (an
evaluator, a differentiator, a printer) is checked for completeness by
the compiler instead of failing at run time on a name it forgot.
Nodes are built with Arena::lib_apply (or the arity-checked
Arena::func). Until 0.49 they were Apply(SymbolId, args) nodes
resolved by the interned text of the head, so a user function named
like a library function took on its semantics. The name
(LibFn::name) is still the head of the JSON Apply form and of the
display.
The list of functions itself (since 0.49) is the one list of every
function, node-backed, library or internal, in base/func.rs: it
generates LibFn — its variants, names and arities — together with
the crate’s internal function identity, and this module re-exports it.