[14] The combo function avoids a tricky issue of infinite recursion. When the first argument of combo bears a head of Function, combo yields that function applied to the second argument. Otherwise, combo just yields the first argument. Permitting the first argument to have a Function head and various expressions with the head of Slot as its argument eliminates a problem of infinite recursion that would otherwise occur. Suppose, for example, that a process
of transformation on the expression recombination[none] should yield a pointer to an expression recombination[none]. If we then go grab the pointed to recombination[none] we set off an infinite recursion because, as known, recombination[none] is subject to transformation. We thus terminate the transformation process by giving the pointer a head of Slot and wrapping the pointer in a head of Function. We make sure not to have any transformations that operate on patterns with a head of Function. With the transformation process now complete, we use combo to apply the created Function expression to the object pointed to and resolve the reference. This method works so long as "terminal expressions" such as
recombination[none] cannot appear inside of other evaluatable expressions. Thus, if the expression behavior[2] transformed to behavior[2], the expression behavior[behavior[2]] would be extremely difficult to handle. [Back]