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:                                            (let ((buf (make-string (file-length file))))
                                               (read-sequence buf file)
                                               (read-from-string buf))
                                           ;; return empty ranking if file doesn't exist
                                           '())))
           (write-ranking (ranking)
                          (with-open-file (file +ranking-file-name+
  
negative.code:                             (list name total-seconds)
                            entry))
                        ranking)
              ;; 同じタイムは後ろに追加する。早い者勝ち。
              (append ranking (list (list name total-seconds))))
            #'< :key #'cadr)))
      ;; 最大で +ranking-max-length+ の項目を返す。
      (loop for i from 1 to +ranking-max-length+
            for entry in ranking1
            collect entry)))
  
  ;; ランキングの内容を表示する。name を指定すると該当の項目の左に矢印が
  ;; 表示される。
  (defun ranking-show (ranking &optional name)
    (loop for place from 1 to 10
          for entry in ranking
  