以下两个公式之间的区别是什么?列表解析中的条款
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]]
根据功能思考随着Haskell中(第92),所述第二版本是“更有效的定义... [其]保证CP XSS计算只是一次“,尽管作者从未解释过为什么。我会认为他们是相同的。
相关:http://stackoverflow.com/q/3951012/190376 –