X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=edge-table.lisp;fp=edge-table.lisp;h=521c7f1e3fce458ccd01f4e92459f94d03a15dc1;hb=d92820d39c18a373611b5bfb018631cffe3e4bcd;hp=c8a648e6351756f5709a7f1773d6adabd54ea0bf;hpb=c090fe80e307758da62ceb1a5371fbf0f8fa603c;p=reversi.git diff --git a/edge-table.lisp b/edge-table.lisp index c8a648e..521c7f1 100644 --- a/edge-table.lisp +++ b/edge-table.lisp @@ -7,7 +7,7 @@ ;;;; Programer: Kevin M. Rosenberg based on code by Peter Norvig ;;;; Date Started: 1 Nov 2001 ;;;; -;;;; $Id: edge-table.lisp,v 1.5 2003/06/12 13:28:55 kevin Exp $ +;;;; $Id: edge-table.lisp,v 1.6 2003/06/17 05:47:18 kevin Exp $ ;;;; ;;;; This file is Copyright (c) 2001-2003 by Kevin M. Rosenberg ;;;; and Copyright (c) 1998-2002 Peter Norvig @@ -42,11 +42,13 @@ (init-edge-table) *edge-table*) +(deftype edge-table () '(simple-array fixnum (*))) + (defun map-edge-n-pieces (fn player board n squares index) "Call fn on all edges with n pieces." ;; Index counts 1 for player; 2 for opponent - (declare (fixnum index) + (declare (fixnum n index) (type player player) (type square index) (type (simple-array fixnum (100)) board) @@ -59,7 +61,7 @@ (sq (first squares))) (declare (fixnum index3 sq)) (map-edge-n-pieces fn player board n (rest squares) index3) - (when (and (> n 0) (eql (bref board sq) empty)) + (when (and (plusp n) (= (bref board sq) empty)) (setf (bref board sq) player) (map-edge-n-pieces fn player board (- n 1) (rest squares) (+ 1 index3)) @@ -119,7 +121,8 @@ (defun combine-edge-moves (possibilities player) "Combine the best moves." - (declare (optimize (speed 3) (safety 0) (space 0))) + (declare (type player player) + (optimize (speed 3) (safety 0) (space 0))) (let ((prob 1.0) (val 0.0) (fn (if (= player black) #'> #'<))) @@ -196,7 +199,7 @@ for i from 0 sum (the fixnum (cond - ((= (bref board sq) empty) 0) + ((= (bref board sq) empty) 0d0) ((= (bref board sq) player) (aref *static-edge-table* i (piece-stability board sq)))