Мне было поручено написать код OCAML для вычисления трассы квадратной матрицы (значения внутри диагонали матрицы). В качестве бонуса, и для моего собственного понимания, я также хотел бы написать код для создания списка следов квадратной матрицы.
Я создал хвостовую рекурсивную функцию, использующую функцию List.map, которая удаляет первый элемент каждой строки и так далее, и так далее.
let trace m =
let rec helper m acc =
match m with
|[] -> acc
|(x::_) -> helper(List.map(fun(y::ys) -> ys)) (acc+x)
in helper m 0 ;;
К сожалению, я считаю, что мой синтаксис отключен, и я не уверен, как решить эту проблему. Я думаю, что имею в виду правильную теорию / идею, но плохую реализацию. Любая помощь будет принята с благодарностью
Это ошибка, которую я получаю при запуске кода:
This expression has type 'a list list -> 'a list list but an expression was expected of type 'b list
1:Warning 8: this pattern-matching is not exhaustive.
Here is an example of a case that is not matched:
[]