Удаление дубликатов из ленивого списка Ocaml

Мне нужно удалить дубликаты из ленивого списка. Вот фрагмент кода, который мне удалось написать, но я понятия не имею, как его исправить, чтобы он работал правильно.

Я знаю, как это сделать, используя обычный список, но ленивый список все еще для меня нов, поэтому я буду рад любой помощи. Вот фрагмент кода, который я пытался написать:

let rec removeDuplicate = function
LNil -> LNil
|LCons(x,xf) -> x::(removeDuplicate (List.filter (fun a -> a<>x) xf));;

Заранее спасибо за помощь.

1 ответ

Решение

Первая проблема, которую я вижу в вашем коде, заключается в том, что вместо создания отложенного списка во втором предложении вы фактически создаете встроенный в OCaml list, с :: Оператор Кроме того, вы не можете использовать List.filter на хвостовой части, так как он также действует на значения типа 'a list, не твой список.

Другие вопросы по тегам