我正在尝试在OCaml中编写一个函数,给定一个包含条目"u","d","l","r"和"x"的矩阵中的坐标,如果从该坐标开始跟随'directions'结束于"x",则返回true,否则返回false .
我的策略是检查我之前是否访问过当前单元格(如果是,返回false),通过传递bool矩阵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 回答
在
t.(x).(y) <- true
表达式后,您错过了分号 . 如果没有分号,编译器会将程序解析为: