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

在这个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 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,取决于返回的内容如果我需要添加除法和乘法怎么办?那么你必须使用真正的解析器。如果我需要添加除法和乘法怎么办?那么你必须使用真正的解析器。