Я изучаю 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 принимает все предыдущие символы и предстоящий символ и возвращает вероятность этого.
Как вы можете видеть: весь метод - это просто перемножение некоторых вероятностей, что было бы намного проще при использовании переменных.