Haskell中如何为递归自定义类型Page实现提取全部Title的递归函数
解决方案
你当前的实现仅提取了当前层级的Title名称,没有递归处理content字段中嵌套的子Page元素,修改后的代码如下:
menu :: Page -> [String] menu (Text _) = [] menu (Title name content) = name : concatMap menu content
代码说明
Text类型节点本身不包含标题,直接返回空列表即可,将未使用的参数改为下划线是Haskell的常规写法,保留原参数名也可正常运行。Title类型节点的处理逻辑:- 首先将当前节点的标题
name加入结果列表 - 使用
concatMap遍历content列表中的每一个Page元素,对每个元素递归调用menu函数获取其下的所有标题,再将所有子结果拼接后合并到当前结果中
- 首先将当前节点的标题
运行效果
修改后执行menu index即可得到所有嵌套的Title组成的列表:
["Home","Welcome!","Lorem","dolor","no title","Look!","Finish"]
内容的提问来源于stack exchange,提问作者wybot
相关产品推荐
相关产品推荐

