#! /usr/bin/clisp

;;; per default zeigen die Karten tux
(defstruct card
 (front 'tux)
 (back  'tux) )

(defconstant allcards
 (vector (make-card)
         (make-card :front 'gates :back 'gates)
         (make-card :back 'gates) ))

(defun flipcard (c)
 (make-card :front (card-back c) :back (card-front c)) )

(defun maybeflipcard (c)
 (if (zerop (random 2))
     c
     (flipcard c) ))

(defun randomcard ()
 (maybeflipcard (svref allcards (random 3))) )

;;; kein Lisp-Programm ohne Makro
(defmacro whentux (v &rest body)
 `(when (eq ,v 'tux) ,@body) )

;;; alles bereit, jetzt wird gezaehlt
(do ((card (randomcard) (randomcard))
    (fronttux 0)
    (bothtux  0) )
   ((= fronttux 1000) (format t "~,2,2f %" (/ bothtux fronttux)))
 (whentux (card-front card)
   (incf fronttux)
   (whentux (card-back card)
     (incf bothtux) )))