私はステートメントの角括弧のバランスをとるコードを実行しています。私はそれが正しいと思うが、それは1つの特定のステートメントで失敗している、私はなぜ理解する必要がありますか?Scala:中括弧のバランスがとれていることを確認してください
これは、それは私がアルゴを修正する必要があると思うコーディング、任意のポインタ?
def balance(chars: List[Char]): Boolean = {
def find(c: Char, l: List[Char], i: Int): Int={
if(l.isEmpty) {
if(c=='(')
i+1
else if(c==')')
i-1
else
i
}
else if (c=='(')
find(l.head, l.tail, i+1)
else if(c==')')
find(l.head,l.tail, i-1)
else
find(l.head,l.tail, i)
}
if(find(chars.head, chars.tail,0) ==0)
true
else
false
}
balance("())(".toList) //passes when it should fail
balance(":-)".toList)
balance("(if (zero? x) max (/ 1 x))".toList)
balance("I told him (that it's not (yet) done).\n(But he wasn't listening)".toList)
このパターン '「)(」'開始 '私は値が負になりますが、これは許されるべきではありませんが、最終的な '('はそれを0に戻した後で、最後を除いて 'i'の値をテストしません。 – jwvh
また、あなたの問題は自分では、より多くのことを学ぶことができます –