如何对通用类型的元组进行模式匹配? F#

时间:2019-04-23 04:04:24

标签: types f# pattern-matching

我要实现的功能从tictactoe游戏返回了最佳动作,该游戏输入了返回(GameState-> Player-> Option(Move)* int-> Move)类型的函数

基本上,我需要获取定义为

的值“ Move”
type Move = 
            { Row:int; Col:int }
type Player = Nought | Cross
type GameState = 
  { Turn: Option<Player>; Size:int; board:Map<int*int, Option<Player>> }

作为输入函数之一返回的元组为(Some(Move类型的最佳移动),与该移动相关联的分数(整数))

我认为这会起作用

match (MiniMax game.board game.Turn) with
                | (Some({Row = x; Col = y;}), _) -> {Row=x Col=y}
                | (None, _) ->

但是我收到一条错误消息: “该表达式的类型应为'GameState-> Player-> Option(Move)* int' 但这里输入a * b'“

如何匹配(MiniMaxResult:Option(Move)* int)的结果,所以我只能提取Move类型?

两名选手;零或交叉 和游戏状态;包含有关董事会行动,规模,轮到谁的信息

1 个答案:

答案 0 :(得分:0)

因此,我在您的代码中看到的第一件事是由于partial application而失败。您的模式匹配期望Option<Move>*int,但是您的MinMaxGenerator返回则返回GameState -> Player -> Option<Move>*int。因此,您必须传递一个类型为GameState的参数和一个类型为Player的参数,以返回期望的结果。不确定这是否是唯一的问题。