Для тех, у кого подозрительный ум, это не домашнее задание, а просто любопытство.
Учитывая конечный алфавит, возможно ли построить список бесконечно длинных слов, составленных из алфавита в обратном лексографическом порядке?
т.е. учитывая алфавит «ab»
, можно построить список:
["aaaaaa...", "baaaaa...", "abaaaa...", "bbaaaa...", "aabaaa...", ...]
где ...
представляет список (и список списков), расширяющийся до бесконечной длины.
Наивная попытка:
counters alphabet = [c:ounter | ounter <- counters alphabet, c <- alphabet]
но это не работает, поскольку остается рекурсивной.
Конечно, с рабочей версией, если вы попытаетесь распечатать результат, вы увидите, что только первый элемент печатается как бесконечный список первого элемента из алфавита. Однако вы сможете сделать это:
mapM_ (print . take 2) . take 4 . counters $ "ab"
и увидеть результат:
aa
ba
ab
bb