Call a Finite State Machine in VHDL
A FSM is a sequential piece of circuitry, and functions are combinational only, so a function cannot represent by itself a FSM.  However, the combinational paths of the FSM can be represented with functions.  Typical examples are coding the next state or the outputs based on the current state and inputs.  It is a very clean way of coding a FSM.

A procedure, on the other hand, can contain sequential statements, but when they do they are mostly used for testbenches using wait statements, which are not synthesizable.