2012-11-27 17 views
2

中實現我不知道函數heads是否存在「函數編程」原因不能在列表(或更一般地在TraversableLike)中實現。對我來說,heads將與tails完全相反,但我必須錯過一些東西。爲什麼功能頭沒有在列表

由於Scala是易於閱讀,這裏是我會看到(用於List情況下):

def heads[T](li:List[T]):List[List[T]] = li match { 
    case Nil => Nil 
    case head::tail => (Nil::heads(tail)).map(head::_) 
} 

因此,這裏有我已經想到了這個功能不被執行的幾種可能性:

  1. head表示List的第一個元素,所以它是沒有意義的,以創建一個函數來遍歷所有頭都只有一個。那爲什麼不是功能prefixes
  2. 這是不可能使這個函數尾遞歸,所以我們寧願忽略它。
  3. 這是無用的(是嗎?)
  4. 這不是與函數式編程的理念兼容(爲什麼?)

預先感謝您的回答。

+0

頭就是名單本身? – pedrofurla

回答

7

我認爲你正在尋找inits。

頭=第一元件
最後=最後一個元素
尾=頭
所有除尾部=遞歸尾
INIT =所有除最後
inits =遞歸初始化

參見下性狀Traversable的描述在Collections API

+0

感謝這個偉大的總結。我沒有看到文檔中的內容。 –

+0

+1,我無法在提供的鏈接中找到'inits',但它目前在'TraversableLike'中定義 - 請參閱[Scaladoc](http://www.scala-lang.org/api/current/index的.html#scala.collection.TraversableLike) – DNA

相關問題