0

私には2つの解決策がありますが、1つはコンパイルされず、もう1つはより良いと思います:

object Foo extends App {
     val vectors = List(List(1,2,3), List(2,2,3), List(1,2,2)) //just a stupid example

     //transposing
     println("vectors = " + vectors.transpose.map (_.sum)) //it prints vectors = List(4, 6, 8)

     //folding
     vectors.reduce {
        case (a, b) => (a zip b) map {
           case (x, y) => x + y
        }
     } //compiler says: missing parameter type for exp. function; arg. types must be fully known
} 
4

2 に答える 2

5

reduceFunction2引数を受け入れますが、 PartialFunction.

vectors reduce { (a, b) => (a zip b) map { case (x, y) => x+y } }

編集: 私のコードは機能しますが、@sschaef は私の説明が間違っていると指摘しました: 型推論の制限により、davips のコードはコンパイルされません。.toSet で作成された Set で型推論が失敗するを参照してください。

于 2013-11-08T05:11:12.087 に答える
1
val vectors = List(List(1,2,3), List(2,2,3), List(1,2,2))

implicit class VectorizedOps[T : Numeric](vec: List[T]) {
  private val numeric = implicitly[Numeric[T]]
  def +(other: List[T]) = (vec zip other).map { case (x, y) => numeric.plus(x, y) }
}

val sum = vectors.reduce( _ + _ )

たぶん速くはありませんが、より慣用的です

于 2013-11-08T05:51:39.327 に答える