我正在学习Haskell在haskell编程从第九频道的讲座。在第七章中,教授使用foldr实现了他自己的foldr算子
(++ ys) = foldr (:) ys他的推理是
xs ++ ys = foldr (:) ys xs
= (++) ys xs = foldr (:) ys xs
= (++ ys) = foldr (:) ys这是黑板

我在这里搞不懂为什么xs ++ ys的功能与(++) ys xs相同。我让xs = [1,2,3]和ys = [4,5,6]通过runhaskell运行它们,它们只是产生了不同的答案:
> main = print $ [1,2,3] ++ [4,5,6]
[1,2,3,4,5,6]
> main = print $ foldr (:) [4,5,6] [1,2,3]
[1,2,3,4,5,6]
> main = print $ (++) [4,5,6] [1,2,3]
[4,5,6,1,2,3]那么,教授在他的推理中到底是什么意思呢?
顺便说一句,我正试图像以下几个方面那样,自己去诱导:
xs ++ ys = foldr (:) ys xs
= (++) xs ys = foldr(:) ys xs方程右边的foldr(:) ys xs表示对于这个Foldable ys中的每个y,将:应用于y和xs,这实际上是在左侧所做的。我的推理正确吗?
发布于 2017-03-12 10:22:07
海事组织,你的推理是正确的-视频中有一个错误:
xs ++ ys = ...
= (++) ys xs = ...真的应该是
xs ++ ys = ...
= (++) xs ys = ...如果您查看视频的注释,您会注意到这个汤姆·洛霍斯特指出了这个错误(包括其他几个)。。
https://stackoverflow.com/questions/42746164
复制相似问题