`
jilen
  • 浏览: 98327 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

scala--简洁优雅的树定义

 
阅读更多

也许还不够优雅。

 

trait Tree[+T] {
   /**
    * 深度优先遍历
    */
   def dfs(func: T => Unit) {
      this match {
         case Empty                    =>
         case Node(value, left, right) => func(value); left.dfs(func); right.dfs(func)
      }
   }
}
/**
 * 空树
 */
case object Empty extends Tree[Nothing]()
/**
 * 节点, 单个节点是一棵树
 */
case class Node[T](val value: T, val left: Tree[T], val right: Tree[T]) extends Tree[T]
/**
 * 叶子,只是为了创建更方便
 */
case class Leaf[T](override val value: T) extends Node[T](value, Empty, Empty)

 在类型上对树做递归定义,函数型语言显得更优雅。

  • 空树是一棵树
  • 节点及其左右子树构成一棵树

关于叶子节点不是必要的,只是为了创建时简洁

 

看这个例子

 val tree = Node(1,
         Node(2, Leaf(4), Empty),
         Node(3, Leaf(5), Empty))
 

构建了形如



 的一颗树,并对其进行深度优先遍历

 

  • 大小: 12.4 KB
分享到:
评论

相关推荐

    scala-calc:Scala 中的简单计算器

    3. **build.sbt**: Scala构建定义文件,定义项目依赖、版本信息和构建设置。 在`Calculator`类中,可能会有一个`evaluate`方法,它接收一个字符串表达式,然后返回计算结果。为了实现这个功能,类可能需要维护一个...

    scala-parser-combinators-completion:对scala解析器组合器的完成支持

    它们允许开发者通过组合小的、简单的解析器来创建复杂解析逻辑,这种方式简洁、灵活且易于维护。`scala-parser-combinators-completion`项目专注于为使用Scala解析器组合器构建的解析器提供补全功能,这对于IDE集成...

    ScalaScraper一个Scala库用于HTML页面抽取内容

    4. **自定义处理逻辑**:除了基本的元素选取和内容抽取,Scala Scraper还允许用户定义自己的处理函数,以处理更复杂的HTML结构和数据格式。 5. **错误处理**:库内建了错误处理机制,帮助开发者优雅地处理网络请求...

    scala-parser-combinators:Scala的基于简单组合器的解析。 以前是Scala标准库的一部分,现在是一个单独的社区维护模块

    总的来说,`scala-parser-combinators`是一个强大且灵活的库,它简化了解析器的开发,使得在Scala中处理文本解析变得更加高效和优雅。无论是对于初学者还是经验丰富的开发者,这个库都是一个宝贵的工具,能够帮助...

    Scala-k-d-tree-implementation:空间划分数据结构设计用于在任意维度的空间中进行有效的最近邻居搜索

    在Scala中实现k-d树,可以充分利用其强大的函数式编程特性,提供简洁且高效的代码。 首先,我们需要理解k-d树的基本概念。k-d树(k-dimensional tree)的名字来源于它的每一层都按照一个维度进行分割,这个维度在下...

    fp-in-scala-presentation:Scala 中的函数式编程演示文稿

    描述中提到"使用 Scala 进行函数式编程,从开始演示",意味着这个文稿将逐步介绍Scala中的函数式编程基础,可能包括如何定义函数、处理集合以及使用高阶函数等概念。"某些幻灯片可以向下导航"暗示这是一个分步讲解的...

    scala-workshop:Scala工作坊(初学者)

    3. **模式匹配**:Scala 提供了强大的模式匹配功能,可以用于数据解析、解构和决策树等场景。 4. **函数**:Scala 中函数是一等公民,可以作为参数传递,也可以作为返回值。函数可以是匿名的,也可以定义在对象或类...

    Scala语言入门

    如果你已经掌握了基本的面向对象编程概念,并希望通过Scala来扩展自己的技能树,那么这份教程将非常适合你。 #### 二、Scala的第一个例子:Hello World ##### 2.1 第一个Scala程序 ```scala object HelloWorld { ...

    Scala语言规范.zip

    Scala是一种多范式编程语言,它融合了面向对象和函数式编程的概念,旨在提供一种更高级别的抽象,使代码更加简洁、优雅。由于其与Java虚拟机(JVM)的紧密集成,Scala程序可以直接在Java平台上运行,这也是它被标记...

    仙境–Scala–卡塔斯:Gigasquidwonderland-clojure-katas的Scala港口

    5. **匿名函数与Lambda表达式**:Scala的`=>`语法允许定义匿名函数,这对于处理集合操作尤其有用。 **函数式编程** Scala深受函数式编程影响,以下是你在卡塔斯中会遇到的函数式编程概念: 1. **不可变性**:函数...

    Scala编程完整版

    1. **基本语法**:Scala的基础语法类似于Java,但更为简洁。它包括变量定义(var和val)、数据类型(如Int、Double、String、Boolean等)、操作符重载以及控制流结构(如if/else、for循环、while循环)。 2. **面向...

    最全programming in scala

    3. **面向对象编程**:Scala支持类和对象的定义,书中讲解了如何使用类和对象进行面向对象编程,并引入了特质(trait)的概念,这是Scala中的一种接口和抽象类的混合体,用于实现多重继承。 4. **模式匹配和案例类*...

    DSL.rar_scala 计算器

    这可以通过定义运算符重载、方法链以及使用`case class`来构造表达式树来实现。 4. **案例类**:Scala的`case class`不仅提供数据封装,还自动生成`equals`, `hashCode`, `toString`等方法,便于构建和比较表达式。...

    Scala中文经典教程,适合快速入门

    Scala是一种高级的多范式编程语言,设计初衷是要集成面向对象编程和函数式编程的特性,让Java虚拟机上的编程变得更简洁、更强大。Scala语言将强大的类型系统与Java生态系统的成熟和稳定性相结合,形成了一个富有表现...

    BartoszMilewski的CTforProgrammers的Scala示例代码_Scala_下载.zip

    Scala的语法简洁且富有表达力,支持高阶函数、模式匹配、类型推断等特性,使其成为学习和应用范畴论的理想工具。 **范畴论基础:** 范畴论是一门研究结构和结构之间映射的数学理论,它抽象了数学中的基本概念,如...

    快学Scala高清中文版

    3. **对象和类**:Scala中的对象和类是统一的,它们都属于定义类型的一部分,可以作为值来使用,这是与其他面向对象语言的一大区别。 4. **函数式编程**:Scala支持函数是一等公民,可以作为参数传递,也可以作为...

    scala 程序设计

    类型系统是Scala的另一个亮点,它具有静态类型,同时提供了类型推断,使得代码更简洁。Scala的类型系统还包括类型别名、类型参数化和隐式转换等高级特性。 高阶函数是指接受函数作为参数或返回函数的函数,它们在...

    scalac-guardedblocks-plugin:简单的Scala编译器插件

    该插件的工作原理是通过拦截和修改Scala源代码(.scala文件)的抽象语法树(AST)。当编译器遇到插件识别的注解时,它会将相关的代码块转换为包含异常处理和条件检查的代码。这样,即使在代码中发生了未预期的情况,...

    zipper:Huet针对Scala和Scala.js的Zipper的实现,旨在在许多常见场景中使用

    【正文】 Scala是一种功能强大的多范式编程语言,它结合了面向对象和函数式编程的特点。...通过深入研究并使用这个库,可以提升代码的简洁性和可维护性,特别是在需要频繁操作和导航树形结构的场合。

    algebraic-structures:在Scala中实现的代数结构

    XSLT是一种用于转换XML文档的语言,而代数结构的实现可能会用到这种转换,特别是在处理树形结构数据时,比如XML文档的解析和操作。 **5. algebraic-structures-master 文件夹** 这个文件名暗示了这是一个源代码仓库...

Global site tag (gtag.js) - Google Analytics