再帰的な括弧のバランスをとる関数を書きましたが、コードにエラーはないようですが、実行すると多くのエラーが発生します。
私はこのような呼び出しで関数を書きました:
if(balance("blarg(arg)".toList)) println("true!") else println("false")
および次のような定義:
def balance(chars: List[Char]): Boolean ={
implicit class MutableInt(var value: Int)
{
def inc() = { value+=1 }
def dec() = { value-=1 }
}
var stack: Int = 0
def recursbalance(chars: List[Char], stack: Int): Boolean=
{
if ((chars.head: Char) == "(".toList) stack.inc()
else if ((chars.head: Char) == ")".toList) stack.dec()
if (stack<0) false
if (chars.isEmpty: Boolean) if (stack == 0) true else false
recursbalance(chars.tail: List[Char], stack: Int)
}
recursbalance(chars: List[Char], stack: Int)
}
次のエラーが表示されます。
Exception in thread "main" java.util.NoSuchElementException: head of empty list
at scala.collection.immutable.Nil$.head(List.scala:337)
at scala.collection.immutable.Nil$.head(List.scala:334)
at recfun.Main$.recursbalance$1(Main.scala:45)
at recfun.Main$.balance(Main.scala:55)
at recfun.Main$.main(Main.scala:16)
at recfun.Main.main(Main.scala)
どうすれば修正できますか? 初心者で申し訳ありません。私は Scala を初めて使用します。
再帰呼び出しをこれに置き換えてみました:
if (chars.isEmpty: Boolean) {
if (stack == 0) true else false
}
else
recursbalance(chars.tail: List[Char], stack: Int)
しかし、私はまだすべてのエラーを取得しています..