The *(term) and *(topic) of a _(programming language)'s method of choosing a definition to use to evaluate some expression. This notion generalizes over several more commonly-known methods that are often not distinguished from evaluation itself. In this sense, dispatch is complementary to _(rewrite).

A function definition is a fairly common part of many programming languages. However, the rules for how definitions are composed into a whole vary widely. The following spectrum is arrayed in increasing range of expressiveness:
<ol>
<li>Lexically-scoped procedural languages in general will require exactly one definition per name of a function, possibly allowing for lexically-scoped overriding of the definition.
<li>_(Object-oriented) programming languages have a variety of arranged schemes for polymorphic dispatch, depending on the object model:
<ul>
<li>Single-dispatch versus multiple-dispatch: whether the first argument or all the arguments are consulted for dispatch.
<li>Single inheritance versus multiple inheritance or mixin-based overrides.
<li>Dispatch on classes versus instances.
<li>Predicate dispatch (only really deployed in _(Cecil)).
<li>Various forms of combination options for functions, whether termed <em>inner</em> calls, <em>super</em> calls, <em>resends</em>, <em>before/after</em>-calls, or <em>around</em> calls.
</ul>
<li>_(Functional) programming languages use _(pattern-matching) to identify the applicable evaluation result. The advantage is that the expression value defined recursively is fully-available for inspection. Such languages can usually dispatch on types, structure, and value of their arguments.
<li>Logical programming languages generally specify a set of rules in an arbitrary sense which apply, and often define a strategy for traversing these rules which hopefully results in a terminating or at least manageable program. This process is often known as _(unification) as distinguished from pattern-matchers.
</ol>

Each of these can generally express the previous one without emulation, but also requires a more sophisticated algorithm to manage efficiently.

Of final note is that the specification of the traversal order of the functions is also included within this concept, through a meta-level protocol concerning the function definitions or the context within which the function definitions are entered.
