Понимание неизменяемых структур данных

Я изучаю scala и, как хороший студент, стараюсь соблюдать все правила, которые я нашел.

Одно из правил - это: НЕИЗМЕНЯЕМОСТЬ!!!

Поэтому я стараюсь писать все с неизменяемыми структурами данных и vals, и иногда это действительно трудно.

Но сегодня я подумал: единственное, что важно, это то, что объект/класс не должен иметь изменяемого состояния. Меня не заставляют кодировать все методы в неизменяемом стиле, потому что эти методы не влияют друг на друга.

Мой вопрос: Я прав или есть какие-то проблемы/недостатки, которых я не вижу??

EDIT:

Пример кода для aishwarya:

def logLikelihood(seq: Iterator[T]): Double = {
  val sequence = seq.toList
  val stateSequence = (0 to order).toList.padTo(sequence.length,order)
  val seqPos = sequence.zipWithIndex

  def probOfSymbAtPos(symb: T, pos: Int) : Double = {
    val state = states(stateSequence(pos))
    M.log(state( seqPos.map( _._1 ).slice(0, pos).takeRight(order), symb))
  }

  val probs = seqPos.map( i => probOfSymbAtPos(i._1,i._2) )

  probs.sum
}  

Пояснение: Это метод вычисления лог-вероятности однородной марковской модели переменного порядка. Метод apply state принимает все предыдущие символы и предстоящий символ и возвращает вероятность этого.

Как вы можете видеть: весь метод - это просто перемножение некоторых вероятностей, что было бы намного проще при использовании переменных.

19
задан Michael J. Barber 5 December 2011 в 14:20
поделиться