Несвязанное значение для переменной в методе ocaml.Попытка напечатать первые 8 элементов массива - PullRequest
0 голосов
/ 05 июня 2019

Я пытаюсь написать метод, который позволит мне распечатывать позиции шахматной партии для 8 верхних позиций.

У меня есть допустимая переменная, которая представляет собой массив из 32 записей, каждая из которых содержит шахматную фигуру * chesscolor * chessposition.

Шахматная позиция определяется как:

chess_position = Alive of chessletter * int | Dead;;

Я сейчас пытаюсь распечатать позиции в первом ряду доски.

У меня есть следующий код:

class chess =
    object
     val mutable initial = ([|Rook,Black,Alive(A,8); (*... *)|])

    method print = 
        for i = 0 to i = 7 do
            for j = 0 to j = 32 do
    if initial.(j) = (Pawn,White,Alive(A,i)) then tmp1="P" else
    if initial.(j) = (Pawn,Black,Alive(A,i)) then tmp1="p" else
    if initial.(j) = (Rook,White,Alive(A,i)) then tmp1="R" else
    if initial.(j) = (Rook,Black,Alive(A,i)) then tmp1="r" else
    if initial.(j) = (Knight,White,Alive(A,i)) then tmp1="N" else
    if initial.(j) = (Knight,Black,Alive(A,i)) then tmp1="n" else
    if initial.(j) = (Bishop,White,Alive(A,i)) then tmp1="B" else
    if initial.(j) = (Bishop,Black,Alive(A,i)) then tmp1="b" else
    if initial.(j) = (Queen,White,Alive(A,i)) then tmp1="Q" else
    if initial.(j) = (Queen,Black,Alive(A,i)) then tmp1="q" else
    if initial.(j) = (King,White,Alive(A,i)) then tmp1="K" else
    if initial.(j) = (King,Black,Alive(A,i)) then tmp1="k" else
                tmp1=".";
                print_string tmp1;
            done
        done
end

В случае нормальных начальных позиций шахмат, где строка белого цвета, это должно распечатать:

RNBQKBNR

Я получаю ошибку несвязанного значения i, и я не могупонимаю почему.На заметку, любые советы по классам и методам приветствуются, так как я пытаюсь изучить это и в настоящее время сосать это.

1 Ответ

1 голос
/ 05 июня 2019

Эта строка:

    for i = 0 to i = 7 do

недопустима.Он анализируется следующим образом:

for i = 0 to (i = 7) do

Второе выражение сравнивает i с 7 на равенство.Но на данный момент i еще не определено.i определяется только в теле цикла for.

Вы хотите сказать:

for i = 1 to 7 do
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...