Вычисление следа матрицы; Синтаксические ошибки - PullRequest
0 голосов
/ 16 апреля 2019

Мне было поручено написать код 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:
[]

1 Ответ

0 голосов
/ 16 апреля 2019

Как говорит @glennsl, вы должны сделать работу, чтобы задать хороший вопрос.Например, вы ничего не говорите об ошибке, которую видите.Обычно вы должны скопировать / вставить текст ошибки в ваш вопрос.

Когда я копирую / вставляю ваш код, я вижу ошибку для этого фрагмента:

(List.map (fun (y :: ys) -> ys))

List.map принимает два параметра:Первая - это функция, которая у вас есть.Второй - это список для отображения, которого у вас нет.Поскольку вы не предоставляете список, значением этого выражения является функция, которая ожидает список и возвращает преобразованный список.

Поскольку первый параметр helper является списком списков (я полагаю), а не функция, у вас есть ошибка типа.(Не синтаксическая ошибка.)

Скорее всего, вам нужно предоставить список, в который вы хотите отобразить свою функцию.

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