(flet ((compute-new-rank (document) (loop for neighbor in (graph-neighbors document) sum (/ (* damping (rank neighbor) (document-similarity document neighbor)) (graph-neighbor-edge-sum neighbor))))) (block convergence (dotimes (i limit) (dolist (document documents) (let ((old-rank (rank document)) (new-rank (compute-new-rank document))) (setf (rank document) new-rank) (when (convergedp old-rank new-rank) (return-from convergence t)))))))