In a more recent development, known as ``genetic programming'' (GP), the solutions are defined by trees of lisp-like expressions. The genetic operations of mutation and cross-over can operate at any node of the tree. In the case of cross-over, a node is chosen at random in (typically) two different trees. The nodes, and all of their higher branches and leaves are simply swapped between the trees.
In this method, the form of the solution does not have to be defined in advance, and so can also evolve. Although the GP exhibits a relatively free-form solution space, it shares with the GA a total control in the nature of the ``fitness function'' and the process of replication. By permitting evolution to determine the form of the solution, GP allows a more creative use of the process of evolution, and has been applied to a wide array of problems, notably by John Koza .