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ため、ヘッドが 1 つしかない場合にすべてのヘッドを反復処理する関数を作成しても意味がありません。それでは、なぜ関数ではないのprefixesでしょうか?
  2. この関数を末尾再帰にすることはできないため、無視することをお勧めします。
  3. だめです(ですよね?)
  4. 関数型プログラミングの哲学と互換性がない (なぜ?)

ご回答ありがとうございます。

4

1 に答える 1

8

私はあなたがinitを探していると思います。

head = 最初の要素
last = 最後の要素
tail = head を除くすべて
tail = recurses tail
init = last を除くすべて
inits = recurses init

Collections APIの Traversable トレイトの説明を参照してください。

于 2012-11-27T23:39:52.803 に答える