-module(gchess). -compile([no_auto_import, nowarn_unused_vars]). -export([main/0]). -spec perft(gleam@erlang@process:subject(game:message()), integer()) -> integer(). perft(Game_actor, Depth) -> case Depth of 0 -> 1; _ -> Moves = game:all_legal_moves(Game_actor), Nodes@2 = gleam@list:fold( Moves, 0, fun(Nodes, Move) -> gleam@io:println(move:to_string(Move)), game:apply_move(Game_actor, Move), Nodes@1 = Nodes + perft(Game_actor, Depth - 1), game:undo_move(Game_actor), Nodes@1 end ), Nodes@2 end. -spec main() -> nil. main() -> Game_actor = game:new_game_from_fen( <<"rnbq1k1r/pp1Pbppp/2p5/8/2B5/8/PPP1NnPP/RNBQK2R w KQ - 1 8"/utf8>> ), game:print_board(Game_actor), _pipe = perft(Game_actor, 2), _pipe@1 = gleam@int:to_string(_pipe), gleam@io:println(_pipe@1).