Scala中的递归数字加法
在这个Scala代码中,我试图分析一个包含和的字符串(例如Scala中的递归数字加法,scala,Scala,在这个Scala代码中,我试图分析一个包含和的字符串(例如12+3+5),并返回结果(20)。我使用正则表达式提取第一个数字并解析要递归添加的轨迹。我的问题是,由于正则表达式返回一个字符串,我无法将数字相加。有什么想法吗 object TestRecursive extends App { val plus = """(\w*)\+(\w*)""".r println(parse("12+3+5")) def parse(str: String) : String = str
12+3+5
),并返回结果(20
)。我使用正则表达式提取第一个数字并解析要递归添加的轨迹。我的问题是,由于正则表达式返回一个字符串,我无法将数字相加。有什么想法吗
object TestRecursive extends App {
val plus = """(\w*)\+(\w*)""".r
println(parse("12+3+5"))
def parse(str: String) : String = str match {
// sum
case plus(head, trail) => parse(head) + parse(trail)
case _ => str
}
}
对于这样的应用程序,您可能需要使用
解析器组合器
“(\w*)\+(\w*)”。r
也匹配“+”
或“23+”
或“4+5”//但仅在第一组中捕获它
你能做的可能是
scala> val numbers = "[+-]?\\d+"
numbers: String = [+-]?\d+
^
scala> numbers.r.findAllIn("1+2-3+42").map(_.toInt).reduce(_ + _)
res4: Int = 42
scala> numbers.r.findAllIn("12+3+5").map(_.toInt).reduce(_ + _)
res5: Int = 20
对于这样的应用程序,您可能需要使用解析器组合器
“(\w*)\+(\w*)”。r
也匹配“+”
或“23+”
或“4+5”//但仅在第一组中捕获它
你能做的可能是
scala> val numbers = "[+-]?\\d+"
numbers: String = [+-]?\d+
^
scala> numbers.r.findAllIn("1+2-3+42").map(_.toInt).reduce(_ + _)
res4: Int = 42
scala> numbers.r.findAllIn("12+3+5").map(_.toInt).reduce(_ + _)
res5: Int = 20
为什么不干脆println(12+3+5)
?;)我正在尝试构建一个计算器,用户输入一个字符串,程序计算result@csharpfolk当解析函数返回时,这不起作用String@ps0604这正是您的想法,您需要更改parse
signature以返回course@csharpfolk这就是问题的重点,如何使函数返回String和Int,具体取决于返回的内容为什么不简单地println(12+3+5)
?;)我正在尝试构建一个计算器,用户输入一个字符串,程序计算result@csharpfolk当解析函数返回时,这不起作用String@ps0604这正是您的想法,您需要更改parse
signature以返回course@csharpfolk这就是问题的重点,如何使函数返回String和Int,取决于返回的内容如果我需要添加除法和乘法怎么办?那么你必须使用真正的解析器。如果我需要添加除法和乘法怎么办?那么你必须使用真正的解析器。