Как сопоставить шаблон на кортеже универсального типа? F # - PullRequest
1 голос
/ 23 апреля 2019

Функция, которую я пытаюсь реализовать, возвращает оптимальный ход из 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 голосов
/ 23 апреля 2019

Итак, первое, что я вижу в вашем коде, это то, что вы потерпели неудачу из-за частичного применения .Ваше совпадение с шаблоном ожидает Option<Move>*int, но ваше MinMaxGenerator возвращает GameState -> Player -> Option<Move>*int.Таким образом, вы должны передать один аргумент типа GameState и один тип Player, чтобы вернуть то, что вы ожидаете.Не уверен, что это единственная проблема.

...