2016-08-05 9 views
0

Scalaで関数を使って一連の値を再帰的に生成することは可能ですか?値をプログラムで生成するscala

このような何か:

def generateVal (nbrOfVal: Int) { 
for (i <- 1 to nbrOfVal) { 
val foo[i] = Seq.fill(6)(nextInt(100))} 
} 

を、直接のvalを使用することが可能になるように。例えば

generateValは(2)与えるだろう:

foo1: Seq[Int] = List(52, 83, 33, 85, 36, 39) 
foo2: Seq[Int] = List(84, 47, 53, 66, 13, 72) 
をして、私たちは何ができる:ここでは

foo1.zipAll(foo2, 0, 0).map { case (a, b) => a + b } 
res: Seq[Int] = List(136, 130, 86, 151, 49, 111) 
+0

チェック[この](http://stackoverflow.com/questions/9094820/how-to-generate-a-list-of-random-numbers) – Esardes

+0

ジャスト好奇心が強い、なぜ 'Seq.fill(6)(nextInt(200))'をすぐに使わないのですか?なぜジッパーとサムのリスト? –

+0

私は、現在のステップの結果が前のステップのデータに依存する多数のランダムサンプルを生成しようとしています。系統を壊し、スタックのオーバーフローを避けるために、私はx回の繰り返しごとにチェックポイントを計画しています。これは、各データセットが繰り返し生成されなければならない理由です。 – ulrich

答えて

2

は完全な例である、println文だものを見るために(デバッグに使用することができます起こっている)。彼らは一般的に、実行を遅く...

import scala.util.Random 

object Randoms extends App { 

    def generateVal(numOfLists: Int, numOfElements: Int): Seq[Seq[Int]] = 
    for (i <- 1 to numOfLists) yield { 
     Seq.fill(numOfElements)(Random.nextInt(100)) 
    } 

    val (numOfLists, numOfElements) = (2, 5) 
    val listOfLists = generateVal(numOfLists, numOfElements) 

    // listOfLists foreach println // debug 

    val startingList = Seq.fill(numOfElements)(0) // must have same # of elements, for zipping! 
    val finalList = listOfLists.fold(startingList) { (s1, s2) => 
    //println(s"s1 = $s1") // debug 
    //println(s"s2 = $s2") // debug 
    (s1 zip s2) map { case (a, b) => a + b } 
    } 

    // println(finalList) 
} 
関連する問題