thlim
thlim

Reputation: 2982

Scala way / idiom of dealing with immutable List

I have found successes using ideas of immutable List but I am stumped when come to this piece of code here. I find myself has written something more Java than of Scala style. I would prefer to use List(...) instead of Buffer(...) but I don't see how I can pass the same modified immutable List to the next function. guesses is also modified within eliminate(...).

Any suggestions to help me to make this the Scala way of doing this is appreciated. Thanks

    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)  
          }
      }
    }
}

Upvotes: 0

Views: 136

Answers (1)

Brian
Brian

Reputation: 20295

Here are some general tips since this might be better suited for codereview and the code posted is incomplete with no samples.

You can use pattern matching instead of if and else for checking the size.

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

Instead of mutating guesses create a new List.

val newGuesses = ...

Then pass newGuesses into eliminate.

Lastly, it looks like eliminate modifies guesses. Change this to return a new list. e.g.

def eliminate(list: List[Int]) = {
 //Eliminate something from list and return a new `List`
}

Upvotes: 1

Related Questions