我目前正在阅读 Real World Haskell 的第 4 章,我正在努力理清思路根据foldr 实现foldl http://book.realworldhaskell.org/read/functional-programming.html#x_E9.
(这是他们的代码:)
myFoldl :: (a -> b -> a) -> a -> [b] -> a
myFoldl f z xs = foldr step id xs z
where step x g a = g (f a x)
我想我会尝试实施zip
使用相同的技术,但我似乎没有取得任何进展。有可能吗?
zip2 xs ys = foldr step done xs ys
where done ys = []
step x zipsfn [] = []
step x zipsfn (y:ys) = (x, y) : (zipsfn ys)
这是如何工作的:(foldr 步骤完成 xs) 返回一个消耗的函数
是的;所以我们沿着 xs 列表构建一个嵌套组合
每个函数都将应用于 ys 的相应部分。
如何想出它:我从总体想法开始(来自类似的
之前见过的例子),写道
zip2 xs ys = foldr step done xs ys
然后依次填写以下每一行所需要的内容
是为了使类型和值正确。这是最容易的
首先考虑最简单的情况,然后再考虑更困难的情况。
第一行可以更简单地写为
zip2 = foldr step done
正如马蒂亚斯特所表明的那样。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)