给定以下数据类型定义:
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)]