 Mutual recursion is very common in the functional programming style, and is often used for programs written in LISP, Scheme, ML, and similar languages.For example, Abelson and Sussman describe how a metacircular evaluator can be used to implement LISP with an eval-apply cycle.In languages such as Prolog, mutual recursion is almost unavoidable.