我知道fold-left会生成左倾树,而fold-right会生成右倾树,但是当我需要使用fold时,有时会陷入令人头痛的思考中,试图确定哪种类型的fold是合适的。通常情况下,我会将整个问题解开,并逐步通过fold函数的实现来解决我的问题。
因此,我想知道:
- 有哪些经验法则可以确定何时使用fold-left或fold-right? - 如何快速决定在面临的问题中使用哪种类型的fold?
在Scala by Example(PDF)中有一个例子,使用fold编写了一个名为flatten的函数,该函数将元素列表的列表连接成单个列表。在这种情况下,正确的选择是右折叠(考虑到列表的连接方式),但我不得不稍微思考一下才能得出这个结论。
由于折叠在(函数式)编程中是如此常见的操作,所以我希望能够快速自信地做出这些决策。那么...有什么建议吗?
因此,我想知道:
- 有哪些经验法则可以确定何时使用fold-left或fold-right? - 如何快速决定在面临的问题中使用哪种类型的fold?
在Scala by Example(PDF)中有一个例子,使用fold编写了一个名为flatten的函数,该函数将元素列表的列表连接成单个列表。在这种情况下,正确的选择是右折叠(考虑到列表的连接方式),但我不得不稍微思考一下才能得出这个结论。
由于折叠在(函数式)编程中是如此常见的操作,所以我希望能够快速自信地做出这些决策。那么...有什么建议吗?