小编San*_*der的帖子

无限循环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
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我很确定我的'默认'案例导致了无限循环.我在所有情况下都使用递归.这意味着,但是,只有简化了Prop.一旦道具不能简化,就应该归还整个东西.

我不知道如何测试任何进一步的简化.(我不允许使用其他库,如freenodes #scala频道所示).

有人可以解释它是否是导致循环的"case _",以及如何解决它?如何在不进行循环的情况下测试可能的简化?

提前致谢!

loops scala case pattern-matching

5
推荐指数
2
解决办法
931
查看次数

Scala while循环一直返回Unit

我有以下代码,但我无法让它工作.一旦我在表壳内放置一个while循环,它就会返回一个单位,无论我在括号内改变什么.

case While(c, body) =>
    while (true) {
      eval(Num(1))
    }
}
Run Code Online (Sandbox Code Playgroud)

如何使while循环返回非Unit类型?

我尝试在我的条件下添加括号,但它仍然没有按照预期的那样做.

有什么指针吗?

更新

更多的背景信息,因为我没有真正解释代码应该做什么,如果我想得到一些帮助,这似乎很方便;

我已经定义了一个eval(exp : Exp).这将评估一个功能. Exp是一个抽象类.几类,如扩展Plus,Minus(几个基本操作)和IfThenElse(cond : Exp, then : Exp, else : Exp).最后但并非最不重要的是,有While(cond: Exp, body: Exp).

如何使用它的例子;

eval(Plus(Num(1),Num(4))会导致NumValue(5).(Num(v:Value)的评估结果为NumValue(v).NumValue扩展了Value,这是另一个抽象类).

eval(While(Lt(Num(1),Var("n")), Plus(Num(1), Var("n"))))
Run Code Online (Sandbox Code Playgroud)

Lt(a : Exp, b : Exp)NumValue(1)如果<b,则返回

scala while-loop

2
推荐指数
3
解决办法
3756
查看次数

标签 统计

scala ×2

case ×1

loops ×1

pattern-matching ×1

while-loop ×1