【发布时间】:2009-05-16 05:11:57
【问题描述】:
我在做YAHT's Recursive Datatype 部分的练习,发现编写listFoldr 函数有点挑战性(主要是因为我一开始并没有真正理解foldl 和foldr 之间的区别)。当我最终意识到foldr 函数的工作原理时,我决定只需简单地交换函数参数即可将我的listFoldl 函数更改为listFoldr 函数:
listFoldl f i [] = i
listFoldl f i (x:xs) = listFoldl f (f i x) xs
listFoldr f i [] = i
listFoldr f i (x:xs) = listFoldr f (f x i) xs
这似乎有效(我做了比这更多的测试):
Main> foldr (-) 4 [1, 2, 3]
-2
Main> listFoldr (-) 4 [1, 2, 3]
-2
但是为练习提供的solution 与我的大不相同。他们的listFoldl和我的一模一样,但是看看他们的listFoldr:
listFoldr f i [] = i
listFoldr f i (x:xs) = f x (listFoldr f i xs)
哪种解决方案更好,我的还是他们的?其中之一不正确吗? (在我的测试中,它们都得到了完全相同的结果......)
【问题讨论】:
标签: haskell fold combinators