0

不変のリストのアイデアを使用して成功を収めましたが、ここのコードに来ると困惑します。私は、Scala スタイルよりも Java に近いものを書いたことに気づきました。List(...)代わりに使用したいのですが、同じ変更された不変を次の関数にBuffer(...)渡す方法がわかりません。内でも変更されます。Listguesseseliminate(...)

これをScalaの方法でこれを行うのに役立つ提案は大歓迎です。ありがとう

    val randomGuesses = List(...) // some long list of random integers

    val guesses = randomGuesses.zipWithIndex.toBuffer

for ( s <- loop()) {
    val results = alphaSearch(guesses)
    if (results.size == 1) {
        guesses(resultes.head._2) = results.head._1
        eliminate(guesses, resultes.head._2)
        }
    else {
      val results = betaSearch(guesses)
      if (results.size == 1) {
        guesses(resultes.head._2) = results.head._1
        eliminate(guesses, resultes.head._2)
      } else {
          val results = betaSearch(guesses)      
          if (results.size == 1) {
            guesses(resultes.head._2) = results.head._1
            eliminate(guesses, resultes.head._2)  
          }
      }
    }
}
4

1 に答える 1

1

これはコードレビューにより適している可能性があり、投稿されたコードはサンプルがなく不完全であるため、いくつかの一般的なヒントを次に示します。

サイズのチェックの代わりifにパターン マッチングを使用できます。else

results.size match{
  case 1 => ... //Code in the if block
  case _ => ... //Code in the else block
}

変更する代わりにguesses、新しいList.

val newGuesses = ...

次に、に渡しnewGuessesますeliminate

eliminate最後に、 modifiesのように見えguessesます。これを変更して、新しいリストを返します。例えば

def eliminate(list: List[Int]) = {
 //Eliminate something from list and return a new `List`
}
于 2013-05-01T16:15:13.763 に答える