Scala-код бесконечного цикла

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
      }
    }
  }
}

I ' Я почти уверен, что у меня бесконечный цикл, вызванный моим «дефолтным» случаем. Я использую рекурсию во всех случаях. Что и должно быть, но только если опору можно упростить. Как только Prop не может быть упрощен, он должен вернуть все это целиком.

Я не понимаю, как я могу проверить дальнейшее упрощение. (Мне не разрешено использовать другие библиотеки, как это предлагается в канале freenodes #scala).

Может ли кто-нибудь объяснить, является ли «случай _» причиной петли, и как ее решить? Как я могу проверить возможное упрощение без создания цикла?

Заранее спасибо!

5
задан Sander 25 February 2012 в 22:17
поделиться