Я пытаюсь добавить некоторые дополнительные агрегатные функции в модуль Seq. Я смотрел на реализацию некоторых функций, перечисленных здесь:
https://github.com/fsharp/fsharp/blob/master/src/fsharp/FSharp.Core/seq.fs
Одно из заявлений об отказе от ответственности: «Эта функция возвращает последовательность, которая обрабатывает всю исходную последовательность, как только эта последовательность повторяется. В результате эту функцию не следует использовать с большими или бесконечными последовательностями». Это верно для многих функций, таких как GroupBy.
Первый вопрос: существуют ли методы написания агрегатных функций, которые могут эффективно обрабатывать большие последовательности? Я знаю, что «большой» субъективен; Я просто ищу общие шаблоны для написания таких функций.
Второй вопрос: как обеспечить эффективную сборку мусора для таких коллекций, как Dictionary (которые определены в агрегатных функциях)? Я понимаю, что словари должны собираться, когда они выходят за рамки, но есть ли способ явно указать это? Учитывая, что область действия словаря остается внутри функции, я не могу вызвать .Clear() для этого, верно?
Seq.fold
? - person ildjarn   schedule 23.06.2011