我只是在擺弄奇怪地發現這是一個有點棘手的一個簡單的遞歸函數解析嵌套的括號內。解析值
例如,如果該計劃的目的是查找用戶的詳細信息,它可能會從{{name surname} age}
到{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")
任何想法的代碼乾淨一點,可以更換???
將是巨大的。這主要是出於好奇,我正在尋找一個優雅的解決這個問題。
感謝代碼的解決方案和全面的佈局。是的,我應該投入一些時間並更好地瞭解解析器組合器。 – Jack
這個答案非常有幫助!謝謝! –