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

时间:2018-05-08 10:39:47

标签: ocaml

我正在努力弄清楚如何处理这段代码,这些代码无法正确编译。我试图为背包问题编写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) ;;

1 个答案:

答案 0 :(得分:3)

您获得的语法错误是由于使用了for循环。语法是following

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

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