1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
|
class Automaton[@specialized(Double) W,State] {
def finalWeight(s: State): W = sys.error("todo");
def allStates: Set[State] = sys.error("toodo");
/**
* Returns a map from states to its final weight. may expand all nodes.
*/
def finalStateWeights = Map.empty ++ allStates.map { s => (s,finalWeight(s)) }
// This works fine:
/*
def finalStateWeights() = {
val it = allStates.iterator;
while(it.hasNext) {
finalWeight(it.next);
}
}
*/
}
abstract class Automaton2[@specialized T1, T2] {
def finalWeight(s: T2): T1
def allStates: Set[T2]
def f = allStates map finalWeight
}
|