I have started learning Haskell and I have problem with understanding how cartesian product of lists of the list works
here is the supposed code
cprod = foldr f [[ ]]
where f xs yss = foldr g [ ] xs
where g x zss = foldr h zss yss
where h ys uss = (x : ys) : uss
What exactly I don’t get is the last function
I’ve replaced variable names as I understand it
mycart = foldr f [[]]
where f currentresult listelem = foldr g [] currentresult
where g currentresultonstep currentresultelem = foldr h currentresultelem listelem
where h currentresultelemonstep onelistelem = (currentresultonstep:currentreslteleemonstep):onelistelem
Shouldn’t the last string be something like this?
where h currentresultelemonstep onelistelem = (onelistelem:currentresultelemonstep):currentresultonstep
as we try to add the elements of the list to the beginning on elements of current result
?
First off, your code as written isn’t syntactically valid:
Second, it seems like you’re confused about the order of arguments in the first parameter of
foldr:The first argument (
a) is an element of the input list ([a]), the second argument (b) is the accumulator.