На основе Сравнение длины списка
Если я хочу найти самый длинный список в списке списков, возможно, самый простой способ:
longestList :: [[a]] -> [a]
longestList = maximumBy (comparing length)
Более эффективным способом было бы предварительное вычисление длин:
longest :: [[a]] -> [a]
longest xss = snd $ maximumBy (comparing fst) [(length xs, xs) | xs <- xss]
Теперь я хочу пойти еще дальше. В обычных случаях это может быть не более эффективно, но можно ли решить эту стрелками ? Моя идея в основном состоит в том, чтобы проходить через все списки одновременно и продолжать, пока вы не превысите длину каждого списка, кроме самого длинного.
longest [[1],[1],[1..2^1000],[1],[1]]
В приведенном выше (очень надуманном) примере вам нужно было бы выполнить только два шага по каждому списку, чтобы определить, что список [1..2 ^ 1000]
самый длинный, без каких-либо необходимо определить всю длину указанного списка. Я прав, что это можно сделать стрелками? Если да, то как? Если нет, то почему и как можно реализовать этот подход?