我試圖寫一個屏風式四子棋遊戲極小的功能,這是我未完成的代碼極小哈斯克爾
minimax:: RT Board ->Int
minimax (Tree board subtrees) = case subtrees of
[] >evaluate board (get_turn board)
_ ->case get_turn board of
Player_X ->maximum (next_socres)
Player_O ->minimum (next_socres)
where next_socres = map evaluate (map get_board subtrees)
--get the node from sub trees
get_board:: RT Board -> Board
get_board (Tree board subtrees) = board
--evaluate moves(not finished)
evaluate :: Board -> Player -> Int
evaluate board me'
|[me,me,me,Blank] `isInfixOf_e` all_stone_lines = 10
|[opp,opp,opp,Blank] `isInfixOf_e` all_stone_lines = -10
|otherwise = 0
where
me = get_stone_of me'
opp = opponent' me
all_stone_lines = combine_list stones_from_rows (combine_list stones_from_cols (combine_list stones_from_left_dias stones_from_right_dias))
stones_from_rows = map (get_from_row board) [1..board_size]
stones_from_cols = map (get_from_column board) [1..board_size]
stones_from_left_dias = map (get_from_left_diagonal board) [-(board_size-1)..(board_size-1)]
stones_from_right_dias = map (get_from_right_diagonal board) [2..(2*board_size)]
我想用地圖它計算整棵樹前,每個子樹來評價,但我不不知道如何在這裏使用map ...而且我意識到如果我的代碼編譯了,它不會是遞歸。任何人都可以教我如何做?
我會盡量讓minimax成爲遞歸函數。即超過極小極小的地圖,而不是評估。 –