В чем разница между двумя следующими формулами?где пункты в списке понятий
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), вторая версия «более эффективным определение ... [который] гарантирует, что ф X вычисляется только один раз ", хотя автор никогда не объясняет, почему. Я бы подумал, что они эквивалентны.
См. Также http://stackoverflow.com/q/3951012/190376 –