Вот проблема, с которой я действительно боролся. Мне нужно объединить две отсортированные последовательности в одну отсортированную последовательность. В идеале алгоритм должен быть ленивым и не требует кэширования более чем одного элемента из каждой последовательности. Это не очень трудная проблема для решения, и я смог разработать ряд решений в F #. К сожалению, у каждого решения Ive есть одна из нескольких проблем.
-
Рекурсивные вызовы генераторам подпоследовательностей с использованием yield!. Это создает элегантно выглядящие решения, но создание подпоследовательности для каждого элемента является убийцей производительности.
-
Действительно тайный и незаметный код с глубоко уложенными совпадающими переключателями, несколькими почти идентичными блоками кода и т.д.
-
Код, который заставляет F # в чисто процедурный режим (много изменяемых значений и т.д.).
И все онлайн-примеры я смог найти основателя на тех же косяках.
Я пропустил что-то очевидное: как это действительно просто или, очевидно, невозможно? Кто-нибудь знает о действительно элегантном решении, которое также эффективно и в основном функционально? (Это не должно быть чисто функциональным.) Если нет, я могу закончить кеширование подпоследовательностей и использование списков или массивов.