オセロ必勝法 Part2
石を返す前に、石を置くのを忘れてました。
あと、initableをちょっと修正しました。
(defun Osero () (let ((table nil)) (defun initable (table sq) (defun initableat (table) (cond ((not table) (setq table '((0 0)))) ((= (cadr (car table)) (1- sq)) (setq table (push `(,(1+ (caar table)) 0) table))) (t (setq table (push `(,(caar table) ,(1+ (cadr (car table)))) table))) table)) (defun nest (f x n) (let ((i 0) (out x)) (while (<= i n) (setq out (funcall f out)) (setq i (1+ i))) out)) (defun nulltable (table) (mapcar '(lambda (x) (list x 'null)) table)) (setq table (nulltable (reverse (nest 'initableat nil (1- (* sq sq)))))))) (defun setdisk (table sq x y disk) (setf (cadr (elt table (+ (* sq x) y))) disk) table))
例
(Osero) setdisk (initable nil 2) (((0 0) null) ((0 1) null) ((1 0) null) ((1 1) null)) (setdisk (initable nil 2) 2 1 0 'white) (((0 0) null) ((0 1) null) ((1 0) white) ((1 1) null))
今度こそ、石を返そうと思います。