我已经开始学习Haskell了,我对理解列表列表的笛卡尔积如何工作有疑问
这是假设的代码
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
我到底得到的是最后一个功能 据我所知,我已经替换了变量名称
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
最后一个字符串不应该是这样的吗?
where h currentresultelemonstep onelistelem = (onelistelem:currentresultelemonstep):currentresultonstep
因为我们尝试将列表的元素添加到当前结果的元素的开头 ?
答案 0 :(得分:3)
首先,您编写的代码在语法上无效:
foo.hs:3:13: parse error on input `where'
其次,您似乎对foldr
的第一个参数中的参数顺序感到困惑:
foldr :: (a -> b -> b) -> b -> [a] -> b
第一个参数(a
)是输入列表的一个元素([a]
),第二个参数(b
)是累加器。