Learning Haskell with Chess

From HaskellWiki
Revision as of 14:12, 18 March 2007 by Smazanek (talk | contribs)
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

This page is about learning Haskell using the board game Chess as a running example. The source code can be found at [1].

Exercise 1 - Data Types

Learning Targets

  • recapitulate Haskell types (keywords type and data, product and sum types)
  • Helium: define equality functions (pattern matching)
  • pretty printing

Tasks

  • Define data types that represent boards (Board), squares (Square), positions (Pos), pieces (Piece) and game states (State).
  • Helium: Implement suited eq-functions.
  • Implement a function prettyBoard::Board->String, that transforms a board into a clearly arranged string representation (human readable :-)). Support this function with auxiliary functions that pretty print pieces, squares, ...
  • Define the initial board (initialBoard::Board), test prettyBoard with initialBoard.
  • Implement a simple evaluation function evalBoard::Board->Int as the difference of material on board (values: Pawn->1, Knight and Bishop->3, Queen->9, Rook->6, King->"infinity"=1000).

Exercise 2 - Move Generator

Learning Targets

Tasks

Exercise 3 - Gametree Generation and Minimax Algorithm

Learning Targets

  • break code in modules
  • complexity
  • recursive data structures -> recursive algorithms

Tasks

  • Define a data type that represents a game tree (GameTree).
  • Roughly estimate the number of nodes of the gametree with depth 4.
  • Define a function play::Gametree->Int, that computes the value of a given game tree using the minimax Algorithm.
  • Implement the function doMove::State->State, that choses the (best) next state.