【发布时间】:2015-10-10 08:21:01
【问题描述】:
以下两个公式有什么区别?
cp [] = [[]]
cp (xs:xss) = [x:ys | x <- xs, ys <- cp xss]
----------------------------------------------
cp [] = [[]]
cp (xs:xss) = [x:ys | x <- xs, ys <- yss]
where yss = cp xss
示例输出:cp [[1,2,3],[4,5]] => [[1,4],[1,5],[2,4],[2,5],[3,4],[3,5]]
根据 Thinking Functional With Haskell (p. 92),第二个版本是“一个更有效的定义......[它]保证 cp xss 只计算一次”,尽管作者从不解释原因。我会认为它们是等价的。
【问题讨论】:
标签: haskell list-comprehension