IEnumerable в OCaml

Я много использую F #. Все базовые коллекции в F # реализуют интерфейс IEumberable, поэтому для доступа к ним вполне естественно использовать единственный модуль Seq в F #. Возможно ли это в OCaml?

Другой вопрос в том, что 'seq в F # ленивый, например Я могу создать последовательность от 1 до 100 , используя {1..100} или более подробно:

seq { for i=1 to 100 do yield i }

В OCaml я использую следующее два метода работы с этой функцией:

  1. создание списка:

     let rec range ab =
      если a> b, то []
      иначе a :: range (a + 1) b ;;
     
  2. или прибегать к явным рекурсивным функциям.

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

Я знаю, что в библиотеке OCaml есть модуль Stream . Но его функциональность кажется довольно ограниченной, а не такой общей, как 'a seq в F #.

Кстати, недавно я играю в задачи Project Euler, используя OCaml. Итак, существует довольно много операций с последовательностями, которые на императивном языке были бы циклами со сложным телом.

6
задан Jeff Mercado 5 July 2011 в 23:57
поделиться