ocaml方法中变量的未绑定值。尝试打印数组的前8个元素

时间:2019-06-05 18:57:29

标签: debugging ocaml

我正在尝试编写一种方法,该方法将允许我为国际象棋游戏的前8个位置打印出位置。

我有一个val可变的缩写,它是32个条目的数组,每个条目包含国际象棋*国际象棋色彩*国际象棋位置。

该象棋位置定义为:

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

我收到一个未绑定值的错误,我不明白为什么。 顺便说一句,感谢有关类和方法的任何建议,因为我正在尝试学习这一点,目前正在吸纳它。

1 个答案:

答案 0 :(得分:1)

此行:

    for i = 0 to i = 7 do

是不合法的。它解析为:

for i = 0 to (i = 7) do

第二个表达式将i与7比较是否相等。但是到那时,还没有定义ii仅在for循环的主体中定义。

你想说:

for i = 1 to 7 do