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