Учитывая следующее определение типа данных:Сформировать все возможные деревья
data FormTree = Empty | Node FormTree FormTree deriving Show
Я хочу, чтобы написать функцию, которая генерирует бесконечный список, содержащий все возможные деревья, отсортированные после длины, например, количество узлов.
Следующий код почти делает то, что мне нужно, но он только спускается дерево с правой стороны, каждый раз добавляя дополнительные узлы, но мне нужно, чтобы он чередовался между обеими сторонами.
allPossibleTrees :: [FormTree]
allPossibleTrees = Empty : [Node x y | x <- recursive, y <- recursive]
where recursive = allPossibleTrees
Выполнение
take 5 allPossibleTrees
дает:
[Empty,Node Empty Empty,Node Empty (Node Empty Empty),Node Empty (Node Empty (Nodes Empty Empty)),Node Empty (Node Empty (Node Empty (Node Empty Empty)))]
, но это должно быть что-то вроде:
[Empty,Node Empty Empty,Node (Node Empty Empty) Empty,Node Empty (Node Empty Empty),Node (Node Empty Empty) (Node Empty Empty)]
Да, но это одиннадцатый один ... 'взять 11. размер карты $ allPossibleTrees = [0,1,2,2,3,3,3,3,3,4,4,3] '. Упс! –