我想生成一个具有不同节点类型的树。对于每个节点类型,存在可以成为该节点的子节点的节点类型的不同可能组合。任何节点类型都可能没有子节点。
recursive-gen
本质上迫使我通过一个叶子生成器开始构建树,这个生成器生成一个没有子节点的任何类型的节点。从子生成器创建生成器的函数实质上必须生成所需的父节点类型,并在子生成器上使用such-that
,直到它生成了所需的子节点类型。这通常会导致运行时错误,表示{10}尝试后such-that
失败。
由于无法从父生成器参数化子生成器,有哪些替代选项?
答案 0 :(得分:1)
与such-that
类似的策略可能是生成一个包含无限制子项的完整树,然后通过过滤掉每个级别的不允许的子项来对其进行后处理。
明显的缺点是你最多可能会在大部分时间里获得相当小的树木,以及做大量的一次性工作。