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
}
}
}
}
Я уверен, что у меня бесконечный цикл, вызванный моим делом по умолчанию. Во всех случаях я использую рекурсию. Это должно быть, но, только если Prop может быть упрощен. Как только Prop не может быть упрощен, он должен вернуть все это.Бесконечный цикл scala-код
Я не вижу, как я могу проверить дальнейшее упрощение. (Мне не разрешено использовать другие библиотеки, как предлагается в канале fscreens #scala).
Может кто-нибудь объяснить, является ли это «случаем», вызывающим цикл, и как его решить? Как я могу проверить возможное упрощение без создания цикла?
Заранее благодарен!
Я понимаю, что вы имеете в виду. Хотя мое назначение говорит мне явно использовать объект-компаньон.' Prop.simplify (Prop): Prop, который возвращает упрощенное и эквивалентное предложение, неоднократно применяя закон Моргана и двойное отрицание к эллимизации аргумента предложения. Полученное предложение должно соответствовать требованиям, изложенным ниже. «Также ваше предложение не полностью соответствует мои лекторы отвечают (у нас есть система для выполнения нашей работы против теста). Смотрите: http://pastebin.com/WDuQKreD (также для полной трески e в данный момент) Спасибо в любом случае! – Sander
@Sander: вам просто нужно добавить случаи для «упрощения» для других операций (также, извините, я не понял, что это домашнее задание - я бы не был так прямо в своем ответе). –
@Sander: Кроме того, как наследование класса case, так и класс case с пустым конструктором являются плохими. 'trait Prop; case object True расширяет Prop' лучше. –