X-Git-Url: http://git.kpe.io/?p=reversi.git;a=blobdiff_plain;f=base.lisp;h=bbcd87209a1b349a8d46e9712d395c3f090b8156;hp=ac4fb55d8d91c256bb3f2844913317f58fe390cb;hb=20c849f483c381f84eae22eee807280c8d00e554;hpb=1d59e17264a602c64d27607c2c00d98cca03e82e diff --git a/base.lisp b/base.lisp index ac4fb55..bbcd872 100644 --- a/base.lisp +++ b/base.lisp @@ -8,7 +8,7 @@ ;;;; Programer: Kevin Rosenberg based on code by Peter Norvig ;;;; Date Started: 1 Nov 2001 ;;;; -;;;; $Id: base.lisp,v 1.3 2003/05/06 15:51:20 kevin Exp $ +;;;; $Id: base.lisp,v 1.4 2003/06/12 12:42:13 kevin Exp $ ;;;; ;;;; This file is Copyright (c) 2001-2002 by Kevin M. Rosenberg ;;;; and Copyright (c) 1998-2002 Peter Norvig @@ -20,9 +20,6 @@ (in-package #:reversi) -(eval-when (:compile-toplevel) - (declaim (optimize (safety 1) (space 0) (speed 3) (compilation-speed 0)))) - (defparameter +all-directions+ '(-11 -10 -9 -1 1 9 10 11)) (defconstant +default-max-minutes+ 30) @@ -113,7 +110,7 @@ `(the piece (aref (the board ,board) (the square ,square)))) (defparameter all-squares - (loop for i from 11 to 88 when (<= 1 (mod i 10) 8) collect i) + (loop for i fixum from 11 to 88 when (<= 1 (mod i 10) 8) collect i) "A list of all squares") (defun initial-board () @@ -155,12 +152,14 @@ (defun count-difference (player board) "Count player's pieces minus opponent's pieces." (declare (type board board) - (fixnum player)) - (- (count player board) - (count (opponent player) board))) + (fixnum player) + (optimize (speed 3) (safety 0) (space 0))) + (the fixnum (- (the fixnum (count player board)) + (the fixum (count (opponent player) board))))) (defun valid-p (move) - (declare (type move move)) + (declare (type move move) + (optimize (speed 3) (safety 0) (space 0))) "Valid moves are numbers in the range 11-88 that end in 1-8." (and (typep move 'move) (<= 11 move 88) (<= 1 (mod move 10) 8))) @@ -202,8 +201,7 @@ (declare (type board board) (type move move) (type player player) - (optimize (speed 3) (safety 0)) -) + (optimize (speed 3) (safety 0) (space 0))) (if (= (the piece (bref board move)) empty) (block search (dolist (dir +all-directions+) @@ -246,8 +244,7 @@ (declare (type board board) (type move move) (type player) - (optimize (speed 3) (safety 0)) -) + (optimize (speed 3) (safety 0) (space 0))) (setf (bref board move) player) (dolist (dir +all-directions+) (declare (type dir dir)) @@ -260,8 +257,7 @@ (type move move) (type player player) (type dir dir) - (optimize (speed 3) (safety 0)) -) + (optimize (speed 3) (safety 0) (space 0))) (let ((bracketer (would-flip? move player board dir))) (when bracketer (loop for c from (+ move dir) by dir until (= c (the fixnum bracketer)) @@ -277,8 +273,7 @@ (type move move) (type player player) (type dir dir) - (optimize (speed 3) (safety 0)) -) + (optimize (speed 3) (safety 0) (space 0))) (let ((c (+ move dir))) (declare (type square c)) (and (= (the piece (bref board c)) (the player (opponent player))) @@ -331,16 +326,6 @@ (defun replace-board (to from) (replace to from)) -#+ignore -(defun replace-board (to from) - (declare (type board to from) - (optimize (safety 0) (debug 0) (speed 3)) -) - (dotimes (i 100) - (declare (type 'fixnum i)) - (setf (aref to i) (aref from i))) - to) - #+allegro (defun replace-board (to from) (declare (type board to from)) @@ -351,7 +336,6 @@ (apply #'vector (loop repeat 40 collect (initial-board)))) - (defvar *move-number* 1 "The number of the move to be played") (declaim (type fixnum *move-number*))