![]() |
1
9
避免显式递归的许多方法是组成内置的递归组合器,这些组合器通常用于非常通用的未赋值。在一个函数、monad或其他提升类型中执行相同的操作有时使用基本的提升操作,例如
您的函数确实具有一些应该是标准组合器提升版本的特性。首先,让我们去掉monad来重建隐式提升的函数:
这里的单词“last”给了我们一个提示;非显式递归通常使用临时列表作为控制结构。所以你想要的是
所以我们有这样的东西:
不幸的是,在这一点上,我们有点卡住了,因为(据我所知)没有一元展开和提升,就像
当然,可能还有其他具有不同结构的方法,但是我怀疑您可能会发现类似的尴尬,任何需要递归进入monad的函数,例如,每个步骤概念上都引入了另一个必须用
总之:首先检查您编写的函数,最好不使用显式递归来表示,使用递归组合器(某种风格的
|
![]() |
2
3
一元列表
关于您希望实现的功能:
|