在OCaml中找到矩阵中的x

时间:2017-08-22 10:48:39

标签: arrays matrix ocaml

我试图在OCaml中编写一个函数,给定一个包含条目的矩阵中的坐标" u"," d"," l&#34 ;," r"和" x",如果遵循'指示'则返回 true 从该坐标结束于" x"或 false 否则。

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

我目前的尝试是在下面( n 是我试图导航的样本矩阵):

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。)

提前致谢!

1 个答案:

答案 0 :(得分:2)

t.(x).(y) <- true表达后你错过了分号。如果没有分号,编译器会将程序解析为:

 t.(x).(y) <- (true if m.(x).(y) = "l" then f m x (y-1) t ...)