Бесконечный список бесконечных счетчиков

Для тех, у кого подозрительный ум, это не домашнее задание, а просто любопытство.

Учитывая конечный алфавит, возможно ли построить список бесконечно длинных слов, составленных из алфавита в обратном лексографическом порядке?

т.е. учитывая алфавит «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
10
задан skaffman 11 February 2012 в 15:40
поделиться