zoukankan      html  css  js  c++  java
  • 类型参数化

    第19章

    queue函数队列

    head:返回队列第一个元素;tail 返回除第一个元素之外的队列;append返回尾部添加了指定元素的新队列

    class SlowAppendShow[T](elems: List[T]) {
      def head = elems.head
      def tail = new SlowAppendShow(elems.tail)
      def append(x: T) = new SlowAppendShow(elems::: List(x))
    }

    2种表达方式效率都不高

    class SlowAppendShow1[T](smele: List[T]) {
      def head = smele.last
      def tail = new SlowAppendShow1(smele.init)
      def append(x: T) = new SlowAppendShow1(x:: smele)
    }

     高效率的解决办法:

    class Queue[T]{
      private val leading: List[T] = Nil
      private val tariling: List[T] = Nil
      private def mirror = {
          if (leading.isEmpty)
              new Queue{tariling.reverse}
          else
           this
    
        def head = mirror.leading.head
    
        def tail = {
          val q = mirror
          new Queue(q.leading.tail, q.tariling)
        }
    
        def append(x: T) =
          new Queue(leading, x:: tariling)
      }
    }

     最终解决方案

    trait Queue[T] {
      def head: T
      def tail :Queue[T]
      def append(x: T):Queue[T]
    }
    object Queue{
      def apply[T](xs: T*): Queue[T] =
        new QueuImpml[T](xs.toList, Nil)
    
      private class QueueImpl[T](
        private val leading: List[T] = Nil,
        private val tarining: List[T] = Nil
        ) extends Queue[T] {
          def mirror =
            if(leading.isEmpty)
                new QueueImpl[T](tarining.reverse, Nil)
                else
              this
         def head : T = mirror.leading.head
         def tail: QueueImpl[T] = {
           val q = mirror
           new QueueImpl[T](q.leading.tail, q.tarining)
         }
        def append(x: T) = 
          new QueueImpl[T](leading, x:: tarining)
      }
    }

    变化型注解:

    下界:

  • 相关阅读:
    Ch1 机器学习基础
    信息论与编码课程设计
    实验4 数据库的安全性、完整性
    实验3 SQL语言—更新操作、视图、索引等操作
    实验2 SQL语言—SELECT查询操作
    实验1 数据库的定义和建立实验
    计算机网络|网络层作业
    信息安全从业者书单推荐
    jenkins异常 -- active (exited),无法启动
    性能测试 -- docker部署grafana
  • 原文地址:https://www.cnblogs.com/zhanggl/p/4986145.html
Copyright © 2011-2022 走看看