У меня есть проект, над которым я работаю, и мне нужно реализовать функцию гистограммы в OCaml. Я должен написать функцию, которая принимает список в качестве аргумента и возвращает гистограмму в виде списка кортежей. Это выглядело бы примерно так:OCaml - реализовать функцию гистограммы
histogram [1;2;3;1;1;3];;
[(1,3);(2,1);(3,2)]
Я не могу заставить это работать. Я чувствую, что я довольно близко, но мне просто нужна помощь/руководство о том, как закончить фактическую функцию гистограммы. Пока что я проверил список (nl) на все, что уже может быть там. Если он уже не содержит номер, я добавляю его в список. Моя проблема в том, что я не знаю, как вызвать функцию, как только я добавил ее в список. Смотрите мой код, где проблема.
let check a ls = match (a,ls) with
|a,[] -> false
|a,xs -> if fst (hd xs) != a then check a (tl xs) else true
let rec count a ls = match ls with
|[] -> 0
|x::xs -> if x = a then 1 + count a xs else 0 + count a xs
let nl = []
let rec histo l = match l with
|[]-> []
|x::xs -> if check x nl then histo xs else nl @ [(x,count x l)] *******
Мне нужно перезвонить histo, где находятся ******. Любая помощь вообще будет действительно оценена.