В предпоследней лекции своего курса Курсера профессор Одерский предложил следующее понимание for
в качестве заключительного шага в прекрасном тематическом исследовании:
def solutions(target: Int): Stream[Path] =
for {
pathSet <- pathSets
path <- pathSet
if path.endState contains target
} yield path
В более ранней лекции он сделал несколько аналогий между for
пониманиями и SQL.
Я ищу способ yield
только те path
, которые имеют DISTINCT
endState
.
Есть ли способ вернуться в рамках предложения фильтра того же понимания к элементам, которые уже были получены?
Другим подходом может быть преобразование pathSets
в Map
от endState
до path
перед оператором for
, а затем вернуть его обратно в Stream
перед его возвратом. Тем не менее, это, казалось бы, потеряло бы ленивые вычислительные преимущества использования Stream
.
Более ранний метод из одного и того же примера исследования выполнил аналогичные цели, но он уже был рекурсивной функцией, в то время как этот (как представляется, не нужен) должен быть рекурсивным.
Похоже, я мог использовать mutable Set
для отслеживания endState
, которые получают доход, но это неудовлетворительно, так как курс успешно избегал использования изменчивости.