【发布时间】:2016-09-30 22:20:21
【问题描述】:
我正在使用 scala 中的一个小程序来检查某些表达式是否正确地形成了关于括号的打开和关闭。这是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(balance("Just (some (random) sentence).\n(That doesn't work)".toList))
问题在于,例如,它不适用于此示例。我跟踪了程序,显然当我们从递归调用返回时出现了问题,但我无法弄清楚错误是什么。
【问题讨论】:
-
“不起作用”到底是什么意思?你有输出吗?
-
@Zermingore 是的,对于 println 语句,它应该返回 true,但实际上返回 false
-
你也可以考虑使用组合解析器(例如 atto)来解决这类问题,尽管这有点矫枉过正。
-
@Reactormonk,有点矫枉过正,是的。这是 Coursera 课程练习...
-
如果这是 Scala 中的函数式编程原则 第一周的作业(并且测试字符串强烈表明它是),这违反了 Coursera 的荣誉准则.
标签: scala functional-programming