В предпоследней лекции своего курса Курсера профессор Одерский предложил следующее понимание 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, которые получают доход, но это неудовлетворительно, так как курс успешно избегал использования изменчивости.