You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 13:36:03