【发布时间】:2011-06-23 19:42:56
【问题描述】:
我不明白为什么这里需要基本情况:
-- perms :: Ord a => [a] -> [[a]]
perms [] = [[]]
perms xs = [ (x:ps) | x <- xs, ps <- perms (xs \\ [x])]
在我看来,从列表理解中它应该是自动的,但后来我注意到:
[ x:y | x<-[], y<-[] ]
计算结果为 [],而不是 [[]],这似乎令人惊讶。
即便如此,我也很惊讶它没有运行基本情况,但总是给出 [],这违反了类型签名。 有没有一种简单的方法来跟踪列表理解的执行? Debug.Trace.trace 似乎是原子的。
【问题讨论】:
-
返回值
[]不违反类型签名。空数组仍然是[[a]]。 -
另外,为什么需要基本案例 - 似乎 LC 应该处理整个事情。还有,有什么简单的方法可以查看 LC 扩展的痕迹吗?
标签: haskell list-comprehension