object Prop {
def simplify(prop : Prop) : Prop = {
prop match {
case Not(Or(a,b)) => simplify(And(Not(a),Not(b)))
case Not(And(a,b)) => simplify(Or(Not(a),Not(b)))
case Not(Not(a)) => simplify(a)
case _ => {
if (simplify(prop) == prop) prop
else prop
}
}
}
}
Ich bin mir ziemlich sicher, dass ich eine Endlosschleife habe, die durch meinen "Standardfall" verursacht wird. Ich verwende in allen Fällen eine Rekursion. Das soll auch so sein, aber nur, wenn der Prop vereinfacht werden kann. Sobald das Prop nicht vereinfacht werden kann, sollte es das Ganze zurückgeben.
Ich wüsste nicht, wie ich eine weitere Vereinfachung prüfen könnte. (Ich bin nicht erlaubt, andere Bibliotheken zu verwenden, wie in freenodes #scala Kanal vorgeschlagen).
Kann jemand erklären, ob es der 'case _' ist, der die Schleife verursacht, und wie man das Problem löst? Wie kann ich auf eine mögliche Vereinfachung testen, ohne eine Schleife zu bilden?
Vielen Dank im Voraus!