我无法将 OCaml 中的 Array 与修改隔离开来

I'm not able to isolate Array in OCaml from modifying

这是完整的代码。我会尝试展示一些作品。我正在编写一个通过 telnet 工作的井字游戏服务器。这是游戏板的表示

1
2
3
4
let empty_board = [|
                [|EMPTY; EMPTY; EMPTY|];
                [|EMPTY; EMPTY; EMPTY|];
                [|EMPTY; EMPTY; EMPTY|]|]

Array.copy 只使用一次,在游戏循环中传递玩家描述符和新棋盘:

1
2
3
4
5
6
let prepare_game_process pair_of_players=
 pair_of_players >>= fun (player1, player2) ->  
 send_to_client player1"You play for X";
 send_to_client player2"You play for O";
 let new_board = Array.copy empty_board in
 game_loop player1 player2 new_board

但是每次新游戏开始时,game_loop 中的所有变化都会反映到原来的 empty_board:

1
2
3
let make_move x y board token=
 board.(y).(x) <- token;
 board

我查看代码十亿次,但根本看不出原因。


您只是在复制外部数组,而不是单个行数组。