anchor.diff:                         0))
                  (gen/check-num (random (length *captcha-providers*))))
   
  -          (multiple-value-bind (question answer)
  -              (funcall (nth gen/check-num *captcha-providers*))
  +          (multiple-value-bind (data question)
  +              (funcall (car (nth gen/check-num *captcha-providers*)))
  +
               (push (make-captcha :id id
  -                                :answer answer
  +                                :data data
  +                                :checker (cdr (nth gen/check-num *captcha-providers*))
                                   :time (get-universal-time))
                     *captcha-pool*)
  +
               (format nil "~d ~a" id question))))))
   
   (defun check-captcha (answer-str)
  
positive.code: 
  ;; CAPTCHA
  (defstruct captcha
    (id        0   :type integer)
    (answer    ""  :type string)
    (time      0   :type integer))
  (defvar *captcha-pool* nil
    "Pool of current (not processed and not expired yet)
     tests")
  
negative.code:                                 :key #'captcha-id)))
              (when captcha
                (setq *captcha-pool* (delete captcha *captcha-pool*))
                (funcall (captcha-checker captcha)
                         (captcha-data captcha)
                         answer)))))))
  
  ;; Various CAPTCHA generators/checkers
  
  (defun multiply-reals-gen ()
    (let ((num1 (random 10))
          (num2 (random 10)))
      (values
       (* num1 num2)
       (format nil "~d*~d = " num1 num2))))
  
  (defun multiply-reals-check (right-answer answer)
    (let ((answer (parse-integer answer :junk-allowed t)))
      (= right-answer answer)))
  
  (defun pushkin-captcha-gen ()
    (let ((what? (random 3)))
      (values
       what?
       (concatenate 'string
                    "\"Я помню чудное мгновение...\" "
                    (case what?
                      (0 "Фамилия ")
                      (1 "ИМЯ ")
                      (2 "Отчество "))
                    "автора"))))
  
  (defun pushkin-captcha-check (what? answer)
    (string=
     answer
     (case what?
       (0 "Пушкин")
       (1 "Александр")
       (2 "Сергеевич"))))
  
  (eval-when (:load-toplevel)
    (register-captcha #'pushkin-captcha-gen #'pushkin-captcha-check)
    (register-captcha #'multiply-reals-gen #'multiply-reals-check))
  