Я читал, что в haskell при сортировке итератора он оценивает как можно больше qsort столько раз, сколько нужно, чтобы возвращать количество фактически оцененных значений на результирующем итераторе (т.е. оно лениво, т.е. когда оно имеет завершил LHS первого поворота и может возвратить одно значение, он может предоставить одно значение при вызове "next" на итераторе и не продолжать поворот, если только следующий не вызван снова).
Например, в haskell head (qsort list) - O (n). Он просто находит минимальное значение в списке и не сортирует остальную часть списка, если не будет получен доступ к остальной части результата qsort list
.
Есть ли способ сделать это в Scala? Я хочу использовать sortWith в коллекции, но сортировать столько, сколько необходимо, чтобы mySeq.sortWith(<). Take (3) и не нужно выполнять операцию сортировки.
Я хотел бы знать, могут ли другие функции сортировки (например, sortBy) использоваться ленивым способом, и как обеспечить ленивость и как найти любую другую документацию о том, когда сортировки в Scala являются или не ленивы оценены.
UPDATE/EDIT. Я идеально ищу способы сделать это со стандартными функциями сортировки, такими как sortWith. Я бы предпочел не использовать собственную версию quicksort, чтобы получить ленивую оценку. Разве это не должно быть встроено в стандартную библиотеку, по крайней мере для таких коллекций, как Stream, которые поддерживают лень?