Я изучаю scala и как хороший ученик, я стараюсь подчиняться всем правилам, которые я нашел.
Одно правило: IMMUTABILITY!!!
Итак, я пытался кодировать все с неизменяемыми структурами данных и 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
}
Объяснение: Это метод вычисления лог-правдоподобия однородной марковской модели переменного порядка. Применяемый метод состояния принимает все предыдущие символы и приближающийся символ и возвращает вероятность этого.
Как вы можете видеть: весь метод просто умножает некоторые вероятности, которые были бы намного проще с использованием vars.