OCaml中的语法:修改后传递数组

OCaml中的语法:修改后传递数组,ocaml,Ocaml,我很难弄清楚如何处理这段代码,因为它不能正确编译。我正试图为背包问题编写一个DP版本。我想通过使用一个名为mem的矩阵将子问题保存在内存中,来跟踪以前的解决方案。我希望将所有值初始化为-1(即尚未计算),除了边缘条件,即背包重量为0或0的物品。因此,我将矩阵初始化为-1,并在边缘条件下更改其值。但我不知道如何在这之后将mem数组传递到代码的下一部分。我尝试在或和中使用,但不起作用 非常感谢您的帮助 let knapsack_mem = fun (vps : (int * int) array)

我很难弄清楚如何处理这段代码,因为它不能正确编译。我正试图为背包问题编写一个DP版本。我想通过使用一个名为mem的矩阵将子问题保存在内存中,来跟踪以前的解决方案。我希望将所有值初始化为-1(即尚未计算),除了边缘条件,即背包重量为0或0的物品。因此,我将矩阵初始化为-1,并在边缘条件下更改其值。但我不知道如何在这之后将mem数组传递到代码的下一部分。我尝试在或和中使用,但不起作用

非常感谢您的帮助

let knapsack_mem = fun (vps : (int * int) array) (c : int) -> 
let mem = Array.make_matrix (c + 1) ((Array.length vps) + 1) (-1) in
mem.(0) <- Array.make (n + 1) 0; for i = 1 to c do mem.(i).(0) <- 0;

(* HERE : in ? and ? *)

let rec aux vps (i,j) = 
    if mem.(i).(j) >= 0 then mem.(i).(j)
    else 
        if lst vps.(i) <= i then max ((aux vps (i - lst vps.(i), j - 1)) + fst vps.(i)) (aux vps (i, j - 1)) 
        else aux vps (i,j - 1)
in aux vps (c, (Array.length vps) + 1) ;;
let knapsack_mem=fun(vps:(int*int)数组)(c:int)->
设mem=Array.make_矩阵(c+1)((Array.length vps)+1)(-1)in

mem.(0)您得到的语法错误是由于使用for循环造成的。语法如下所示:


由于这是一个副作用的操作,不要忘记使用一个;在“完成”之后继续执行主体的功能。您的代码还有其他问题,但这应该可以修复语法错误。

您得到的语法错误是由于使用for循环造成的。语法如下所示:

由于这是一个副作用的操作,不要忘记使用一个;在“完成”之后继续执行主体的功能。您的代码还有其他问题,但这应该可以修复语法错误

for i = 1 to n_jobs () do
    do_next_job ()
done