什么是scala代码的含义和解释

时间:2017-04-10 05:49:09

标签: scala

       val list= (List('a,'a,'a,'a,'b,'b,'b,'c,'c,'c,'c,'d,'e,'e,'e,'f,'a))
       def pack[list](ls : List[list]):List[List[list]] = {
       if (ls.isEmpty) List(List())
       else {
       val (packed, next) = ls span { _ == ls.head }
        if(next == Nil) List(packed)
       else packed :: pack(next)
        }
          }
         println(pack(list))
         }

输出:                列表(列表('a,'a,'a,'a),列表('b,'b,'b),列表('c,'c,'c,                'c),列表('d),列表('e,'e,'e),列表('f),列表('a))

任何人都可以解释这段代码是如何运作的。

1 个答案:

答案 0 :(得分:1)

span

  

“返回其元素全部满足的列表的最长前缀   给出谓词,以及列表的其余部分。“

这里的列表是ls参数,ls.head是列表的第一项 然后将这两个列表分配给packed(包含最长前缀),然后将其包含其余列表。如果next为空,则返回前缀列表,否则会有一个递归调用将前缀列表与递归结果连接