Code: Select all
score = -Search(); // search with reduced depth or aspirated window
if(score > alpha) score = -Search(); // research unreduced or with open window
But doing the loop over moves twice in case you don't fail high means that all moves have been searched (and consequently move lists have been created for all daughters). If you want to redo that loop, you would visit the same daughters again. So you would benefit if you had left all their move lists on the move stack, remembering where exactly, and passing that info to the daughters so they could reuse them when they are searched a second time. Also in the case of Internal Iterative Deepening, where you redo the loop over moves several times, you would benefit from hanging on to the move lists of all daughters.
Not only keeping your own move list on the move stack, but also those of all your daughters, would of course drive up the size of the move stack by a factor 40 or so, but with current memory sizes that is hardly an issue.