Availability:built-in

**functor**(

`?Term, ?Name, ?Arity`)

`Term`is a term with functor

`Name`/

`Arity`. If

`Term`is a variable it is unified with a new term whose arguments are all different variables (such a term is called a skeleton). If

`Term`is atomic,

`Arity`will be unified with the integer 0, and

`Name`will be unified with

`Term`. Raises

`instantiation_error()`

if `Term`is unbound and

`Name`/

`Arity`is insufficiently instantiated.

SWI-Prolog also supports terms with arity 0, as in `a()`

(see
section 5). Such terms
must be processed using
compound_name_arity/3.
The predicate functor/3
and =../2 raise a `domain_error`

when faced with these terms. Without this precaution a *round trip*
of a term with arity 0 over functor/3
would create an atom.