Author: Steven Edwards
Date: 07:03:55 01/22/04
Here's some example code for the ChessLisp intepreter in my program Symbolic:
;;;; emp.lsp: Enumerate movepaths
(defun emp (theFEN theDepth)
"Enumerate distinct movepaths from a FEN string to a depth"
(cond
((not (string? theFEN))
"Error: first argument must be a FEN string")
((not (and (integer? theDepth) (nonnegative? theDepth)))
"Error: second argument must be a nonnegative integer")
(t
(let ((thePos (PosFromFEN theFEN)))
(if (null? thePos)
"Error: invalid position"
(emp-aux thePos theDepth))))))
(defun emp-aux (thePos theDepth)
"Enumerate distinct movepaths from a position to a depth"
(cond
((= theDepth 0) 1)
((= theDepth 1) (length (Generate thePos)))
(t
(let ((theSum 0) (theEnv nil) (theMove nil) (theML (Generate thePos)))
(dolist (theMove theML)
(Execute theMove thePos theEnv)
(incf theSum (emp-aux thePos (1- theDepth)))
(Retract theMove thePos theEnv))
theSum))))
This page took 0.01 seconds to execute
Last modified: Thu, 15 Apr 21 08:11:13 -0700
Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.