Automatically defined functions were for the first time introduced by Koza as a way of reusing code in genetic programming (Koza 1992). These ADFs obey a rigid syntax in which an S-expression, with a LIST-
function on the root, lists
-1 function-defining branches and one value-returning branch (Figure 6.1). The function-defining branches are used to create ADFs that may or may not be called upon by the value-returning branch. Such rigid structure imposes great constraints on the genetic operators as the different branches of the LIST function are not allowed to exchange genetic material amongst themselves. Furthermore, the ADFs of genetic programming are further constrained by the number of arguments each takes, as the number of arguments must be a priori defined and cannot be changed during evolution.