为什么函数头没有在List中实现

时间:2012-11-27 23:25:47

标签: scala

我想知道函数heads是否存在“函数式编程”原因不能在List中实现(或更常见地在TraversableLike中实现)。对我而言,headstails完全相反,但我必须遗漏一些东西。

由于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. 它与函数式编程的理念不兼容(为什么?)
  5. 提前感谢您的回答。

1 个答案:

答案 0 :(得分:8)

我认为你正在寻找内容。

head =第一个元素
last = last element
tail =除头部以外的所有人 tails = recurses tail
init =除上一个以外的所有
inits = recurses init

请参阅Collections API

中特性Traversable下的说明