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
}
}
}
}
Estoy bastante seguro de que tengo un bucle infinito causado por mi caso 'predeterminado'. Estoy usando recursividad en todos los casos. Lo cual debe ser, pero solo si la Prop puede simplificarse. Tan pronto como la Prop no se pueda simplificar, debería devolver todo.Código scala loop infinito
No veo cómo puedo probar para una mayor simplificación. (No tengo permitido usar otras bibliotecas, como se sugiere en el canal freenades #scala).
¿Alguien puede explicar si ES el 'caso _' que causa el bucle, y cómo resolverlo? ¿Cómo puedo probar una posible simplificación sin hacer un ciclo?
¡Gracias de antemano!
Veo lo que quiere decir. Sin embargo, mi tarea me dice explícitamente que use un objeto complementario. Prop.simplify (Prop): Prop que devuelve una Proposición simplificada y equivalente al aplicar repetidamente la ley de Morgan y la elliminación de doble negación al argumento Proposition. La proposición resultante debe cumplir con los requisitos detallados a continuación. Además, su sugerencia no coincide por completo. mis profesores responden (tenemos un sistema para ejecutar nuestro trabajo en contra de una prueba) Ver: http://pastebin.com/WDuQKreD (también para el bacalao completo e por el momento) ¡Gracias de todos modos! – Sander
@Sander: Solo tiene que agregar casos a 'simplify' para las otras operaciones (también, lamento no haber entendido que esto es tarea, no habría sido tan directo en mi respuesta). –
@Sander: Además, tanto heredar de una clase de caso como tener una clase de caso con un constructor vacío son malas. 'rasgo Prop; case object True extends Prop' es mejor. –