У меня есть список списков, например [[1; 2; 3]; [2]; [3; 4; 5; 6]; [7; 8; 9; 10]
Я хочу поместить их в Hashtbl, где ключ - это длина списка, а значение - список списков, который содержит все подсписки заданной длины.
Так что для примера выше хеш будет выглядеть следующим образом
Key Value
1 [[2]]
3 [[1;2;3]]
4 [[3;4;5;6];[7;8;9;10]]
Кроме того, я также пытаюсь отслеживать длину самого длинного списка, и это число - то, что возвращается функцией
Код, который делает это следующим образом.
let hashify lst =
let hash = Hashtbl.create 123456 in
let rec collector curmax lst =
match lst with
[] -> curmax
| h::t -> let len = (List.length h) in
(if ((Hashtbl.mem hash len)=true)
then ( let v = (Hashtbl.find hash len) in Hashtbl.add hash len v@[h] ) (* Line 660 *)
else ( Hashtbl.add hash len [h]));
(collector (max len curmax) t)
in
collector 0 lst
;;
Теперь, когда я делаю это, я получаю следующую ошибку для кода выше
File "all_code.ml", line 600, characters 50-72:
Error: This expression has type unit but an expression was expected of type
'a list
Почему Ocaml требует возвращаемый тип 'списка и как мне это исправить.
заранее спасибо
Puneet