我正在使用scala中的一個小程序來檢查某些表達式i是否相對於括號的打開和關閉正確形成。這是問題here但我自己的程序。括號平衡算法
def balance(chars: List[Char]): Boolean = {
def balanced(chars: List[Char], opened: Int, closed: Int): Boolean = {
if (chars.isEmpty && opened == closed) true
else if (opened < closed) false
else {
if (chars.head == '(') balanced(chars.tail, opened + 1, closed)
if (chars.head == ')') balanced(chars.tail, opened, closed + 1)
else balanced(chars.tail, opened, closed)
}
}
balanced(chars, 0, 0)
}
的println(平衡( 「只是(有些(隨機)的句子)。\ n(即不工作)」。toList))
的問題是,例如它不適用於這個例子。我追溯了程序,當我們從遞歸調用返回時,顯然問題出現了,但我無法弄清楚錯誤是什麼。
你是什麼意思,完全與「不工作」?你有輸出嗎? – Zermingore
@Zermingore是,對於println語句,它應該返回true,但它實際上返回false – Rodrigo
你也可以考慮使用組合符解析器(例如ATTO)對於這類問題,雖然這是一個有點矯枉過正這裏。 – Reactormonk