#! /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) )))