Got a problem with this function. It is part of a heuristic thing for a game. If I can't get a winning row of five stones, or block a winning row from the opponent, or blah blah blah, I want it to place a stone at some random point adjacent to the opponent's last move. Basically think of a tic-tac-toe grid but larger. A 3x3 array, 0 to 9. If opponent places a stone in 4, then I want it to place randomly in 0 to 3 or 5 to 9. At the moment it almost works, but freezes if the stone is placed on the left edge of the board. Code (Text): (defun rndplyr () (if (null (get-history)) (list 0 0 ) (let ((hist (get-history)) (lm (car (get-history)))) (do ((row (+ (car lm) (+ (random 3) -1 ) )) (col (+ (cadr lm) (+ (random 3) -1 ) ))) ((score (list row col) (get-board)) (list row col))))) ) Any hints?