Синтаксис в OCaml: передача массива после модификации - PullRequest
0 голосов
/ 08 мая 2018

Мне сложно понять, что делать с этим кодом, который неправильно компилируется. Я пытаюсь написать версию 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 голосов
/ 08 мая 2018

Синтаксическая ошибка, которую вы получаете, связана с использованием цикла for. Синтаксис: следующий :

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

Поскольку это побочная операция, не забудьте использовать a; после «готово» продолжить тело функции. Есть другие проблемы с вашим кодом, но это должно исправить синтаксическую ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...