Не уверен, в чем проблема на самом деле. Я новичок в Elm, так что не беспокойтесь.

board = [ [ 'P', 'P', ' ' ], [ ' ', ' ', ' ' ], [ ' ', ' ', ' ' ] ]

move = nextBestMove board


nextBestMove : List (List Char) -> Int
nextBestMove gameNode =
    let
        node =
            map fromList gameNode

        -- node is now List (Array.Array Char)

        currentBoard =
            fromList node

        -- currentBoard is now Array.Array (Array.Array Char)

        row1 =
            get 0 currentBoard

        -- row1 is now Maybe.Maybe (Array.Array Char)

        -- now I want to place an X for the empty value in [ 'P', 'P', ' ' ]
        row1NextState =
            set 2 'X' row1

... rest of code

Я получаю ошибку несоответствия типа :

The 3rd argument to function `set` is causing a mismatch.

22|             set 2 'X' row1
                          ^^^^
Function `set` is expecting the 3rd argument to be:

    Array.Array Char

But it is:

    Maybe (Array.Array Char)

Я не понимаю, почему, потому что теперь я подумал, что у меня есть двумерный массив, что должно быть хорошо. Что я пытаюсь сделать, так это получить указатель на первую строку на моем игровом поле. Поэтому я хочу добраться до [0] [0], чтобы затем обновить пустое место в строке [ 'P', 'P', ' ' ]

elm
0
PositiveGuy 11 Сен 2018 в 20:52

1 ответ

Лучший ответ

Как вы отметили, get выводит тип Maybe. Это означает, что нам нужно преобразовать тип Maybe в тип Array, чтобы использовать его в set. Мы могли бы использовать такую ​​функцию, как withDefault вот.

    row1NextState =
        set 2 'X' (withDefault (Array.initialize 3 (always ‘X’)) row1)

Это заставляет вяз использовать [ 'X', 'X', 'X' ] в случае, если row1 равно Nothing.

1
Joseph Cho 11 Сен 2018 в 18:17