# VariableNode

A VariableNode is a kind of AnyNode used to represent "variables". It is meant to correspond to the ordinary notion of a "variable" symbol as commonly understood in term algebra, lambda calculus, first-orderlogic or model theory. VariableNodes are not like variables in C, C++, perl, python, java, scheme or lisp: they do not hold or contain values. Instead, they are declarative place-holders, used to locate or indicate a spot within whatever Link contains them. By definition, VariableNodes provide a name (a label) for the location that they indicate. Variables are almost always typed; truly untyped labels should use AnyNode instead.

By itself, a VariableNode is untyped, and so can be thought of implicitly ranging over all possible values in some universe. Note, however, that VariableNodes don't actually, explicitly range over anything; they are just symbols that are not constants. The semantics of the symbol depends on the context, and on the evaluator that is manipulating the expressions that contain variables in them. So, for example, when used in a BindLink, a VariableNode plays more-or-less the same role that a 'bound variable' does in lambda calculus or proof theory.

VariableNodes are meant to be typed, by using the TypedVariableLink to specify the type. In this case, the variable is expected to behave in the same way that it would in type theory.

VariableNodes can be converted into constants by quoting them with a QuoteLink.

In the pattern matcher, a single VariableNode can only be grounded by one Atom. The GlobNode can be used to perform wild-card matching for multiple atoms in a sequence (see glob on wikipedia.)

VariableNodes are a special case of the AnyNode, used to provide a name to a Connector. See Connectors and Sections for details.

## Semantics

There are currently several different subsystems in OpenCog that use variables, these are:

Each of these systems give a different semantics to VariableNodes.

The natural language learning code uses AnyNode instead of VariableNode. Perhaps AnyNode should be made obsolete, and replaced by VariableNode.