![]() |
1
8
我认为前两个问题的答案是“视情况而定”——自由单子会带来一些开销,当然也会遇到堆栈溢出,但您可以始终使用一个避免这种情况的实现,如果您正在进行I/O,那么开销可能不会太大。 我认为自由单子更大的问题是它们太复杂了。它们可以让你解决一个问题(抽象出你如何使用大量的it操作运行代码),但代价是你让代码变得非常复杂。大多数时候,我认为你可以保留一个“功能内核”作为一个很好的可测试的纯部分和围绕它的“命令包装器”,它足够简单,你不需要对它进行测试和抽象。 自由单子是非常通用的建模方法,你可以使用更具体的表示。对于阅读和写作,你可以做:
正如你所见,这不仅仅是一个简单的列表-
输入“Hello”时,只显示名称是否为空。运行程序的代码如下所示:
前两种情况很好,完全是尾部递归的。最后一个例子是tail recursive in
自由单子基本上是对这一点的抽象——但我个人认为它们走得太远了,如果我真的需要它,那么像上面这样的东西——有具体的说明——是更好的解决方案,因为它更简单。 |
![]() |
jkfe · 为什么println会在这段递归代码中执行? 2 年前 |
![]() |
Jimmy · 这种算法怎么能按顺序遍历树“爬上”树呢? 2 年前 |
![]() |
AvirukBasak · gcc中无return语句的尾部递归 2 年前 |
![]() |
Dharmik Patel · 使用python递归完全可以整除 2 年前 |
![]() |
W.tan · 一维最短距离递归算法 2 年前 |
![]() |
ncarrawa · 将1添加到i(递归)时出现类型错误 2 年前 |
![]() |
Eren · Python递归何时返回[duplicate] 2 年前 |