История изменений
Исправление qnikst, (текущая версия) :
вот кстати полный кейс (где нужно состояние visited таскать уже с unfoldr лучше смотреться будут), хотя я обычно через вспомогательную функцию такое делал (но это только в задачках, не помню, чтобы в работе нужно было):
extendCluster :: (Point -> [Point]) -> [Point] -> [Point]
extendCluster range = unfoldr go . (Set.empty,)
go (_, []) = Nothing
go (visited, (f:fs))
| f `V.member` visited = go visited fs
| otherwise = Just (f, (Set.insert f visited, fs ++ range f))
P.S. а кто-нить кому нечего делать не хочет написать решение через комонады или Fix?
Исправление qnikst, :
вот кстати полный кейс (где нужно состояние visited таскать уже с unfoldr лучше смотреться будут), хотя я обычно через вспомогательную функцию такое делал (но это только в задачках, не помню, чтобы в работе нужно было):
extendCluster :: (Point -> [Point]) -> [Point] -> [Point]
extendCluster range = unfoldr go . (Set.empty,)
go (_, []) = Nothing
go (visited, (f:fs))
| f `V.member` visited = go visited fs
| otherwise = Just (f, (Set.insert f visited, fs ++ range f))
Исправление qnikst, :
вот кстати полный кейс (где нужно состояние visited таскать уже с unfoldr лучше смотреться будут), хотя я обычно через вспомогательную функцию такое делал (но это только в задачках, не помню, чтобы в работе нужно было):
extendCluster :: (Point -> [Point]) -> [Point] -> [Point]
extendCluster range = unfoldr go . (Set.empty,)
go (_, []) = Nothing
go (visited, (f:fs))
| f `V.member` visited = go visited fs
| otherwise = Just (f, Set.insert f visited, fs ++ range f)
Исправление qnikst, :
вот кстати полный кейс (где нужно состояние visited таскать уже с unfoldr лучше смотреться будут), хотя я обычно через вспомогательную функцию такое делал (но это только в задачках, не помню, чтобы в работе нужно было):
extendCluster :: (Point -> [Point]) -> [Point] -> [Point]
extendCluster range = unfoldr go
go (_, []) = Nothing
go (visited, (f:fs))
| f `V.member` visited = go visited fs
| otherwise = Just (f, Set.insert f visited, fs ++ range f)
Исходная версия qnikst, :
вот кстати полный кейс (где нужно состояние visited таскать уже с unfoldr лучше смотреться будут), хотя я обычно через вспомогательную функцию такое делал (но это только в задачках, не помню, чтобы в работе нужно было):
extendCluster :: (Point -> [Point]) -> [Point] -> [Point]
extendCluster range = unfordr go
go (_, []) = Nothing
go (visited, (f:fs))
| f `V.member` visited = go visited fs
| otherwise = Just (f, Set.insert f visited, fs ++ range f)