Learning Haskell with Chess
Revision as of 16:26, 18 March 2007 by BrettGiles (talk | contribs) (Learning Haskell With Chess moved to Learning Haskell with Chess)
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 complete 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
- list comprehension
- stepwise refinement
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.