3

我想知道是否有“函数式编程”的原因导致该函数heads不在 List (或更一般地在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表示 a 的第一个元素List,因此如果只有一个,则创建一个遍历所有头的函数是没有意义的。那为什么不是函数prefixes呢?
  2. 不可能使这个函数尾递归,所以我们宁愿忽略它。
  3. 它没用(是吗?)
  4. 它与函数式编程的哲学不兼容(为什么?)

提前感谢您的回答。

4

1 回答 1

8

我想你正在寻找 inits。

head = 第一个元素
last = 最后一个元素
tail = 除了头部之外的所有元素
tails = 递归 tail
init = 除了最后一个元素之外的所有元素
= 递归初始化

请参阅Collections API中 trait Traversable 下的描述。

于 2012-11-27T23:39:52.803 回答