Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Symbolic: The KBNK recognizer

Author: Gerd Isenberg

Date: 11:47:09 02/23/04

Go up one level in this thread


On February 23, 2004 at 12:30:47, Steven Edwards wrote:

>Heres some example code from Symbolic, the KBNK endgame class recognizer:
>
>(defun IsKBNK? (MyPos)
>    "Return White if KBNK, Black if KBNK reversed, nil otherwise"
>    (cond
>        ((and
>            (= (CountByColorPos White MyPos) 3)
>            (= (CountByColorPos Black MyPos) 1)
>            (= (CountByManPos WhiteBishop MyPos) 1)
>            (= (CountByManPos WhiteKnight MyPos) 1)) White)
>        ((and
>            (= (CountByColorPos Black MyPos) 3)
>            (= (CountByColorPos White MyPos) 1)
>            (= (CountByManPos BlackBishop MyPos) 1)
>            (= (CountByManPos BlackKnight MyPos) 1)) Black)
>        (t nil)))
>
>Comments:
>
>1. Does anyone really think that Lisp is hard to read?

As a C++ programmer a bit unusual, yes.
Is the cond operator for (nested) if else?

>
>2. While the above could have been done in the C++ code of the underlying
>tookit, it wouldn't have been that much faster.

Well maybe, because the first statement is most often false anyway ;-)


>
>3. The above code, like all of ChessLisp, is typesafe.  This means that a
>function that expects a color checks for a color value, one that expects a
>position symbol checks for a position symbol, etc.
>
>4. Further work on KBNK will help with the design and implementation of the
>pattern recognition and planning facilities.


In C++ i may use typesafe inliners like this:
(I like to avoid duplicate code for white and black)

enum colorOrNil
{
   white,
   black,
   nil
};

bool CNode::oneSideHasKingOnly()
{
   return nofPieces(white) == 1 || nofPieces(black) == 1;
}

colorOrNil CNode::isKBNK()
{
   if ( nofPieces() == 4 && oneSideHasKingOnly()
     && nofBishops() == 1   && nofKnights() == 1   )
      return colorOf(knight);
   return nil;
}


Gerd



This page took 0 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.