(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))))) (loop named convergence for iteration from 0 to iteration-limit do (loop for document in documents for old-rank = (rank document) for new-rank = (compute-new-rank document) do (setf (rank document) new-rank) when (convergedp old-rank new-rank) do (return-from convergence t))))