Иногда я занимаю некоторое время, чтобы играть с Scala, чей набор функций обращается ко мне, несмотря на невозможность использовать его в моей собственной работе (пока). Для ударов я решил попробовать первые несколько 99 Haskell Problems самым общим способом - использовать и возвращать любую подходящую коллекцию. Первые несколько вопросов были слишком сложными, но я обнаружил, что я полностью оштрафован на flatten
. Я просто не могу понять, как набрать такую вещь.
Чтобы быть конкретным о моем вопросе: возможно ли написать безопасную для типа функцию, которая выравнивает произвольно-вложенные SeqLike
s? Итак, скажем,
flatten(List(Array(List(1, 2, 3), List(4, 5, 6)), Array(List(7, 8, 9), List(10, 11, 12))))
вернет
List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12): List[Int]
? Обратите внимание, что это не тот же вопрос, что и в наборах задач Haskell и Scala; Я пытаюсь написать функцию, которая выравнивает не гетерогенные списки, а скорее однородные, но вложенные последовательности.
Поиск в Интернете Я нашел перевод в Scala этого вопроса, но он работает и возвращает List [Any]. Правильно ли, что для этого потребуется какая-то рекурсия типа? Или я делаю это сложнее, чем это?