anchor.diff:      (let ((ranking (read-ranking)))
           (write-ranking (funcall fun ranking)))))
   
  +;; メッセージ message を表示し、ユーザーから 1 あるいは 2 を受け取る。
  +;; 1 を受け取れば t を、さもなくば nil を返す。
   (defun yes-no-dialog (message)
     (scr-format "~a(yes=1 or no=2)~%" message)
     (= 1 (read-command-char)))
   
  +;; クリア記録 total-seconds をランキングファイルへ登録時のダイアログ。
   (defun ranking-dialog (total-seconds)
     (when (yes-no-dialog "ランキングに登録しますか？")
       (scr-format "名前を教えてください:~%")
  
positive.code:                             (list name total-seconds)
                            entry))
                        ranking)
              ;; 同じタイムは後ろに追加する
              (append ranking (list (list name total-seconds))))
            #'< :key #'cadr)))
      ;; collect up to +ranking-max-length+ entries
      (loop for i from 1 to +ranking-max-length+
            for entry in ranking1
            collect entry)))
  
  (defun ranking-show (ranking &optional name)
    (loop for place from 1 to 10
          for entry in ranking
  
negative.code:               (scr-format "~a ~a位 ~2,'0d:~2,'0d:~2,'0d ~a~%"
                            arrow place h m s entry-name))))))
  
  ;; ランキングを更新する。ランキングファイルからデータを読み込み、1引数
  ;; の関数 fun にランキングデータを渡す。fun の返り値をランキングファイ
  ;; ルに保存する。
  ;;
  ;; TODO: 別のプロセスがランキングを同時に変更しないようにロックすべき。
  (defun ranking-transaction (fun)
    (flet ((read-ranking ()
                         (with-open-file (file +ranking-file-name+
  