【发布时间】:2013-04-19 11:57:38
【问题描述】:
我目前正在下班后的空闲时间参加 Coursera 上的 Scala 课程,以尝试最终尝试函数式编程。我目前正在处理一项任务,我们应该“计算”包含某个对象的两个集合的并集。我故意省略了细节,因为这对我在这里要问的内容并不重要。然而,相关的是集合被定义为二叉树,每个节点包含一个元素和两个子树。
既然如此;讲座中union的例子如下:
def union(other:BTSet) :BTSet = ((left union right) union other) incl element
问题1:坦率地说,即使在阅读了相关的常见问题解答和其他论坛帖子之后,我仍然不明白这个功能是如何以及为什么起作用的。除了在头节点添加(incl 调用)元素之外,在联合实现中绝对没有执行任何“动作”,它只是一遍又一遍地调用自己。我会非常感谢一些解释...
问题 2: 课程论坛包含许多帖子,指出此解决方案根本没有效率,而且还不够好。看到我不明白它是如何工作的,我真的不明白为什么它不够好。
请注意,我不会以任何方式要求对分配解决方案进行剧透。我非常愿意“为成绩做作业”,但我根本不明白我应该在这里做什么。我不相信课程中提供的说明和指导足以让您了解函数式编程的怪癖,因此我欢迎任何解决如何正确思考而不是的 cmets/answers >如何正确编码。
【问题讨论】:
-
也许您缺少的空集有不同的实现?
-
所以试着一步一步画出发生了什么!假装别人里面有一个东西,而你调用的那个东西只有一个左、右和元素,但左右本身没有孩子。这应该足以得到图片。
-
当你递归下去时,你最终会得到一个空节点作为子节点,这将调用以不同方式实现的联合。
-
基本上“this”集合正在被拆除,其元素被一一添加到“other”集合中。
-
2016 coursera 的讨论也很有启发性:coursera.org/learn/progfun1/discussions/weeks/3/threads/…
标签: scala recursion functional-programming theory