Skip to main content

Module libfn

Module libfn 

Source
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.

Enums§

Arity
How many arguments a library function takes.
LibFn
A library special function: the identity of its expression node (an Apply(name, args) resolved by name until 0.49).