2014-11-12 2 views
0

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

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

Заранее за вашу помощь.

+0

, пожалуйста, покажите нам ваше определение типа – ivg

+0

Тип 'a llist = LNil – user4165421

+0

Возможно, два сообщения на http://typeocaml.com/ помогут вам немного? –

ответ

1

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

+0

Итак, я определил свой собственный оператор конкатенации (@ $), который на самом деле хорошо работает с ленивым списком. Не могли бы вы дать мне некоторый намек на то, как заменить List.filter в этом коде? – user4165421

+0

Ленточный список состоит из головы и функции для вычисления хвоста. Отфильтрованный ленивый список должен будет просмотреть список (вызывая функцию хвоста, если необходимо), чтобы получить хорошую голову. Тогда сама функция фильтра - это хвост. –

+2

Я могу дать вам еще один намек, попытайтесь реализовать свою собственную версию нетерпеливого списка, т. Е. Переопределить стандартный список ocaml, после чего вы сможете легко решить вашу проблему с ленивым списком. Как начальный намек, тип списка желаний может быть представлен как «type» a lst = Nil | Минусы *. – ivg

Смежные вопросы