为什么下面的代码会给我这个错误? 请注意,is_sorted函数返回true或false 和make_move函数返回列表列表。例如[[0,1,3,2],[1,0,2,3]]
let rec solve_helper b pos n r fn =
if n = 0 then b :: r :: fn (*fn is the final array with all paths*)
else match pos with
[] -> fn
|(h::t) -> if is_sorted h = true then h
else h :: r (* ERROR HERE: r is the temp array that contains 1 path*)
solve_helper b (make_moves h) (n-1) r
solve_helper b t (n-1) r (*tail recursion*)
;;
let solve_board b n = solver_helper b (make_moves b) n [] []
;;
新代码:
let rec solve_helper b pos n r fn =
if n = 0 then r :: fn (*fn is the final array with all paths*)
else match pos with
[] -> fn
|(h::t) -> if is_sorted h = true then
let j = h :: r in
r :: fn
else
let u = h :: r in
let k = solve_helper b (make_moves h) (n - 1) r fn in
solve_helper b t (n - 1) r fn(*tail recursion*)
;;
let solve_board b n = solve_helper b (make_moves b) n [] []
;;
答案 0 :(得分:0)
您的代码的这些行:
else h :: r (* ERROR HERE: r is the temp array that contains 1 path*)
solve_helper b (make_moves h) (n-1) r
solve_helper b t (n-1) r (*tail recursion*)
据我所知,没有意义。它们表示对名为r
的函数的调用,该函数有10个参数(其中两个是函数r
本身)。
可能您需要编辑代码以准确显示编译器所看到的内容。
如果您的代码实际上是这样的,则需要重新考虑此部分。它读起来就像命令式代码(一系列要做的事情)而不是功能代码(由应用于参数的函数组成的表达式)。