Arrays 在OCaml中查找矩阵中的x

Arrays 在OCaml中查找矩阵中的x,arrays,matrix,ocaml,Arrays,Matrix,Ocaml,我试图用OCaml编写一个函数,给定矩阵中包含“u”、“d”、“l”、“r”和“x”的一个坐标,如果从该坐标的“方向”以“x”结束,则返回true,否则返回false 我的策略是通过传递布尔矩阵t,将当前单元格的值更新为true,来检查我以前是否访问过当前单元格(如果是,则返回false) 我当前的尝试如下(n是我尝试导航的示例矩阵): 设n=[[u]、[d]、[l]、[l]、[r]; [|“r”;“d”;“r”;“l”;]; [|“u”;“r”;“d”;“d”;“l”]; [|“u”;“l”;

我试图用OCaml编写一个函数,给定矩阵中包含“u”、“d”、“l”、“r”和“x”的一个坐标,如果从该坐标的“方向”以“x”结束,则返回true,否则返回false

我的策略是通过传递布尔矩阵t,将当前单元格的值更新为true,来检查我以前是否访问过当前单元格(如果是,则返回false)

我当前的尝试如下(n是我尝试导航的示例矩阵):

设n=[[u]、[d]、[l]、[l]、[r];
[|“r”;“d”;“r”;“l”;];
[|“u”;“r”;“d”;“d”;“l”];
[|“u”;“l”;“l”;“d”;“u”];
[|“r”;“x”;“l”;“l”;“d”];
[|“r”;“d”;“u”;“d”;“l”;];;
设xMax=(Array.length n);;
设yMax=(Array.length n.(0));;
设t=Array.make_矩阵xMax yMax false;;
设rec f m x y t=
如果x<0 | | y<0 | | x>=(Array.length m)| | y>=(Array.length m.(0))| | t.(x)。(y)=真
那就错了
否则(
如果m.(x)。(y)=“x”,则为真
否则(

t、 (x)。(y)在
t.(x)之后缺少分号。(y)在“true”之后添加“;”,否则它将无法编译。您应该始终指定遇到的失败类型:编译时(语法错误、键入错误)或者运行时错误。imo的最佳实践是复制系统的确切错误消息以供使用,这样其他人可以更容易地帮助您解决这两个问题。下次我会记住这一点
let n = [|  [|"u"; "d"; "l"; "l"; "r"|];
            [|"r"; "d"; "r"; "l"; "l"|];
            [|"u"; "r"; "d"; "d"; "l"|];
            [|"u"; "l"; "l"; "d"; "u"|];
            [|"r"; "x"; "l"; "l"; "d"|];
            [|"r"; "d"; "u"; "d"; "l"|]|];;
let xMax = (Array.length n);;
let yMax = (Array.length n.(0));;
let t = Array.make_matrix xMax yMax false;;

let rec f m x y t = 
if x < 0 || y < 0 || x >= (Array.length m) || y >= (Array.length m.(0)) || t.(x).(y) = true 
then false
else (
    if m.(x).(y) = "x" then true
    else (
        t.(x).(y) <- true 
        if m.(x).(y) = "l" then f m x (y-1) t
        else if m.(x).(y) = "r" then f m x (y+1) t
        else if m.(x).(y) = "u" then f m (x-1) y t
        else if m.(x).(y) = "d" then f m (x+1) y t
        else false
        )
    );;
t.(x).(y) <- true
 t.(x).(y) <- (true if m.(x).(y) = "l" then f m x (y-1) t ...)