2017-04-10 72 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是列表的第一個項目,然後 兩列被分配到打包(含最長前綴),其中包含了休息和未來。如果下一個是空的則返回前綴列表,否則有一個遞歸調用級聯前綴列表與遞歸