Пользовательский список расплющить OCaml - PullRequest
0 голосов
/ 01 октября 2018

В настоящее время я делаю пользовательскую версию List.flatten, и я заблокирован в одном месте.В настоящее время у меня есть:

let rec doflatten (ls:int list list) (flatList: int list) : int list =
  match ls with
  | [] -> flatList
  | hd :: tl -> (doflatten (List.tl(ls)) (List.hd(hd) :: flatList))

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

doflatten [[1;2;4]; []; [9]; [5;6]] [] = [1;2;4;9;5;6] 

1 Ответ

0 голосов
/ 01 октября 2018

Вы работаете со списком списков, поэтому в этом шаблоне:

| hd :: tl -> ...

заголовок hd является списком.

Однако, hd может быть пустымсписок.Ваш код не обрабатывает этот случай должным образом.Вам просто нужно решить, что вы хотите сделать.

У вас может быть дополнительный шаблон, подобный этому:

| [] :: tl ->

этот шаблон будет соответствовать рассматриваемому случаю.

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