Because of the high remaining search depth, only a giant margin of material disadvantage ranging from at least Queen to Queen+Pawn allows for the sufficiently riskless triggering of the razor. We achieve additional safety by neither razoring nodes with <= 3 opposing pieces nor if the immediately predecessing move caused an extension of search depth. Otherwise, our conservative version of razoring reduces the remaining search depth of pre-pre-frontier nodes by 1 ply if they fulfill the razor condition. Then it applies extended futility pruning to the freshly razored nodes. Thence, the overall effect of limited razoring at pre-pre-frontier nodes is to cut off quiet moves and non-checking captures with insufficient material gains and a remaining depth of 3 plies while reducing the search depth of all other moves by 1 ply if the side-to-move suffers from a severe disadvantage.
The integration of both extended futility pruning and limited razoring with an existing alpha-beta searcher proves to be quite simple. Figure 1.1 provides the skeleton of a correspondingly selective search function that outlines the necessary additions. Because of its verbose ANSI-C style and the numerous embedded comments, the search skeleton is quite self-explanatory. It assumes all not explicitly declared identifiers to be suitably defined and initialized. Furthermore, the following two general observations are noteworthy.