LazyList
вычисляет каждый элемент только один раз, независимо от того, сколько раз был пройден список. Таким образом, это ближе к последовательности, возвращаемой из Seq.cache
(а не к типичной последовательности). Но, кроме кэширования, LazyList
ведет себя точно так же, как список: он использует структуру списка внутри и поддерживает сопоставление с образцом. Поэтому вы можете сказать: используйте LazyList
вместо seq
, когда вам нужна семантика списка и кэширование (в дополнение к лени).
Что касается того, что оба бесконечны, seq
использование памяти является постоянным, а LazyList
- линейным.
Эти документы могут стоить прочитать.