2017-04-10 26 views
-7
 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',一个 '一 '一),表(' B,' B“B),表( 'c,'c,'c, 'c),列表('d),列表('e,'e,'e),列表('f),列表('a))什么是Scala代码的含义和解释需要

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

+0

你尝试过调试它的结果呢?你有scala的基本知识吗? –

+0

我给出了输出! 我只是在学习scala。如果您对如何掌握Scala有任何想法,请分享您的想法。 – kark

+3

是的,通过阅读关于这个主题的书籍和视频教程 –

回答

1

跨度

“返回所有元素均满足 给出谓词和列表的其余部分列表的最长前缀。”

这里清单是LS参数和ls.head是列表的第一个项目,然后 两列被分配到打包(含最长前缀),其中包含了休息和未来。如果下一个是空的则返回前缀列表,否则有一个递归调用级联前缀列表与递归