X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=base.lisp;h=bbcd87209a1b349a8d46e9712d395c3f090b8156;hb=20c849f483c381f84eae22eee807280c8d00e554;hp=10edbde0e34502bc7af0a95af0fe065d5d14f3b6;hpb=9fb8305e6005c35f639a46d00c626805054e3d4a;p=reversi.git diff --git a/base.lisp b/base.lisp index 10edbde..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.2 2002/10/25 13:09:11 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 @@ -18,9 +18,7 @@ ;;;; (http://opensource.franz.com/preamble.html), also known as the LLGPL. ;;;;*************************************************************************** -(in-package :reversi) -(declaim (optimize (safety 1) (debug 3) (speed 3) (compilation-speed 0))) - +(in-package #:reversi) (defparameter +all-directions+ '(-11 -10 -9 -1 1 9 10 11)) (defconstant +default-max-minutes+ 30) @@ -112,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 () @@ -154,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))) @@ -201,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+) @@ -245,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)) @@ -259,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)) @@ -276,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))) @@ -330,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)) @@ -350,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*))