In order make recognizer results compatible with the results of probes from standard transposition tables, we compose them of bound and score information. Incorporating bounds into their results further increases the usefulness of recognizers because it enables them to return a meaning of the kind ``this is at least/at most a draw/loss/win for Black/White''. Furthermore, recognizer results may contain an expense indicator that tells the controlling search whether to store them directly into the standard transposition tables. For the sake of clarity, the following descriptions elaborate on each of the three proposed result items.
Due to the diversity of information that our recognizer results contain,
their handling after successful recognitions proves to be somewhat
involved. Figure 1.3 provides the skeleton of a normal
search function which outlines the necessary additions. Because of its
verbose ANSI-C style and the numerous embedded comments, this search
skeleton is quite self-explanatory. It assumes all not explicitly
declared identifiers to be suitably defined and initialized. Please
note how closely the actions resemble the handling of bounds and scores
as read from standard transposition tables. Successful recognitions
actually ``massage'' the search tree in a similar manner as successful
accesses to transposition tables. Beside causing direct cutoffs by
exact, fail-high, or fail-low scores, recognizer results may also shrink
the alpha-beta window (raise alpha or lower beta) at the current node
while the search still descends on its way down in the game tree. Upon
lowering beta, the search skeleton carefully keeps track of the largest
upper bound (denoted by upper) that it may return. It does so in
the same way as it keeps track of the best score so far. Fail-high
cutoffs respect this upper bound by returning the minimum of upper
and the best score so far as their result. This works flawlessly because
beta <= upper always holds.