Устранить последовательные дубликаты элементов списка ocaml - PullRequest
0 голосов
/ 08 мая 2018

Я работаю над "99 проблемами Ocaml", и в решении я вижу этот образец соответствия:

let rec compress (mylist : 'a list) : 'a list = match mylist with
  |a::(b::_ as t) -> if a = b then compress t else a::compress t
  |smaller -> smaller

Я понимаю, что для первого соответствующего случая, если элемент a совпадает с элементом b, я перехожу к списку t. Если нет, я добавлю элемент a в список сжатия t.

Для второго подходящего случая я не уверен, что типа "меньше".

Когда я пытаюсь поставить вокруг него квадратную скобку, так как думаю, что автор хочет сопоставить второй случай с одним списком элементов, но у меня есть неисчерпывающий шаблон.

Можете ли вы объяснить мне, что такое "меньше" в этом случае?

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

Другой способ написать функцию compress без smaller:

   let rec compress (mylist : 'a list) : 'a list = match mylist with
    | a::(b::_ as t) -> if a = b then compress t else a::compress t
    | _ -> mylist;;

То же самое, что и ответ пользователя tbrk: если mylist не соответствует первому выражению, то compress mylist возвращает mylist.

0 голосов
/ 08 мая 2018

Переменная smaller представляет собой 'a list. Он соответствует всему, что не соответствует более ранней ветви, то есть списку с одним элементом или пустому списку.

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