2

Scala での FPからの演習の一環として、私は on の実装にfoldLeft取り​​組んでいIndexedSeqます。

私は2つの関数を書きました:

  def foldLeft[A, B](as: IndexedSeq[A])(z: B)(f: (B, A) => B): B = {
    def go(bs: IndexedSeq[A], acc: B): B = {
        if (bs.isEmpty) acc
        else go(bs.tail, f(acc, bs.head))
    }
    go(as, z)
  }

そして、pattern match方法:

  def foldLeftPM[A, B](as: IndexedSeq[A])(z: B)(f: (B, A) => B): B = {
    def go(bs: IndexedSeq[A], acc: B): B = bs match {
        case x +: xs => go(xs, f(acc, x))
        case _ => acc
    }
    go(as, z)
  }

EDIT回答+:から演算子を取得したことに注意してください。リンクされた投稿ごとに定義せずに利用できるため、 のクラスまたはその親のメンバーのようです。dhgsIndexedSeq

どちらの方が優れていますか (パフォーマンスまたは慣用的な Scala の観点から)?

4

1 に答える 1

0

パターンマッチは間違いなくより慣用的です。

パフォーマンスについては、それらはまったく同じであるため、ほぼ同じである必要があります。

ベンチマークだけが決定しますが、それには多くの仮定が含まれます.

于 2013-11-03T19:59:44.703 に答える