Haskell中获取数据结构所有遍历路径的allPaths函数实现问题
你的实现缺少递归终止的分支逻辑:当当前节点没有后续子节点时,当前节点本身就是一条完整的路径,而你的代码此时会返回空列表,导致所有路径都被丢弃。
修正后的实现如下:
allPaths :: (a -> [a]) -> a -> [[a]] allPaths f a = case f a of -- 无后续节点,返回仅包含当前节点的路径 [] -> [[a]] -- 有后续节点,将当前节点拼接到所有子路径头部 children -> map (a:) $ concatMap (allPaths f) children
用你给出的测试用例验证:
ghci> let f a = if a == 1 then [2, 3] else if a == 2 then [4] else [] ghci> allPaths f 1 [[1,2,4],[1,3]]
完全符合预期输出。
内容的提问来源于stack exchange,提问作者cdupont
相关产品推荐
相关产品推荐

