我只是在开玩笑,奇怪地发现在一个简单的递归函数中解析嵌套括号有点棘手。
例如,如果程序的目的是查找用户详细信息,则它可能会从{{name surname} age}
to{Bob Builder age}
转到Bob Builder 20
。
这是一个小程序,用于在大括号中求和,演示了这个概念。
// Parses string recursively by eliminating brackets
def parse(s: String): String = {
if (!s.contains("{")) s
else {
parse(resolvePair(s))
}
}
// Sums one pair and returns the string, starting at deepest nested pair
// e.g.
// {2+10} lollies and {3+{4+5}} peanuts
// should return:
// {2+10} lollies and {3+9} peanuts
def resolvePair(s: String): String = {
??? // Replace the deepest nested pair with it's sumString result
}
// Sums values in a string, returning the result as a string
// e.g. sumString("3+8") returns "11"
def sumString(s: String): String = {
val v = s.split("\\+")
v.foldLeft(0)(_.toInt + _.toInt).toString
}
// Should return "12 lollies and 12 peanuts"
parse("{2+10} lollies and {3+{4+5}} peanuts")
任何可以替换的干净代码的想法???
都会很棒。我正在寻找一个优雅的解决方案来解决这个问题,这主要是出于好奇。