
Untitled
By: a guest on
Jun 30th, 2012 | syntax:
None | size: 1.25 KB | hits: 9 | expires: Never
Creating a compound iterator in F#
seq {
for y1 = 0 to BOARDSIZE-1 do
for x1 = 0 to BOARDSIZE-1 do
for dy = -2 to 2 do
for dx = -2 to 2 do
let x2 = x1 + dx;
let y2 = y1 + dy;
let currentMove = new MoveStruct(x1, y1, x2, y2);
if (currentMove.SomeCondition = true) then
yield currentMove;
}
let AllCells =
seq {
for y=0 to BOARDSIZE-1 do
for x=0 to BOARDSIZE-1 do
yield (x,y);
};
let LegalMovesAround(x1,y1) =
seq {
if board.[x1, y1] = WHITE then
for dy = -2 to 2 do
for dx = -2 to 2 do
let x2 = x1 + dx;
let y2 = y1 + dy;
let currentMove = new MoveStruct(x1, y1, x2, y2);
if (currentMove.DetermineMoveType <> MoveType.ILLEGAL
&& board.[x2, y2] = NONE) then
yield currentMove;
}
let validMoves =
AllCells
|> Seq.collect LegalMovesAround
|> Seq.distinct
let allLegalMoves = seq {
for cell in AllCells do
yield! LegalMovesAround cell
}
seq {
for x,y in Allcells do
yield! LMA(x,y)
}