加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 递归集合:它是如何工作的?

发布时间:2020-12-16 09:32:43 所属栏目:安全 来源:网络整理
导读:我目前正在下班之后,随时免费考察Coursera的Scala课程,以试图终止功能性编程。我目前正在做一个任务,我们应该“计算”包含一些对象的两个集合的联合。我有意地省略细节,因为这里我想要问的问题并不重要。然而,相关的是,这些集合被定义为二叉树,每个节
我目前正在下班之后,随时免费考察Coursera的Scala课程,以试图终止功能性编程。我目前正在做一个任务,我们应该“计算”包含一些对象的两个集合的联合。我有意地省略细节,因为这里我想要问的问题并不重要。然而,相关的是,这些集合被定义为二叉树,每个节点包含一个元素和两个子树。

就这样演讲中的示例联盟如下:

def union(other:BTSet) :BTSet = ((left union right) union other) incl element

问题1:坦白说,即使在阅读了相关FAQ和其他论坛主题之后,我仍然不明白这个功能如何运作。除了在头节点添加(incl调用)元素之外,在联合实现中完全没有“动作”,它只是一遍又一遍地调用它。我会非常感谢一些解释…

问题2:课程论坛包含很多帖子,指出这个解决方案根本没有效率,而且还不够好。看到我不明白如何开始,我不太明白为什么它不够好。

请注意,我不以任何方式要求分配解决方案的扰流板。我更愿意“做成绩”,但我根本不明白我应该在这里做什么。我不相信课程中提供的指导和指导足以使您的头脑围绕功能性编程的怪癖,因此,我欢迎任何意见/答案,解决如何思考,而不是如何编码权利。

解决方法

A
 /   union  D
B   C

((B union C) union D) incl A
  ^^^^^^^^^......................................assume it works

(  B             )
(       union D ) incl A
(     C          )

(((0 union C) union D) incl B) incl A
   ^^^^^^^^^.....................................just C

(((C union D) incl B) incl A
   ^^^^^^^^^.....................................expand

((((0 union 0) union D) incl C) incl B) incl A
    ^^^^^^^^^....................................just 0

(((0 union D) incl C) incl B) incl A
   ^^^^^^^^^.....................................just D

((D incl C) incl B) incl A
^^^^^^^^^^^^^^^^^^^^^^^^^^.......................all incl now

只是一步一步写出来。现在你看到这个联盟减少到一些应用于右手论证的包含语句。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读