带有模式匹配的scala字符串尾递归
scala string Tail recursion with pattern match
我正在尝试编写一个尾递归函数来反转字符串,这是代码,出于某些原因我不确定模式匹配条件是否阻止它获取反转字符串作为输出
def revstring(str:String):String={
@tailrec
def rev(str:String,r:String):String={
str match{
case s if s.head==null =>null
case x if x.tail.isEmpty => ""
case _=> rev(str.tail, str.head +r)
}
}
rev(str,"")}println(revstring("Mississipi"))
}
s.head
永远不会为空。如果字符串为空(或者如果它为 null,它 永远不会 - null 永远不应该真正出现在 scala 代码中),它将抛出异常。
此外,您 return 太早了 - x.tail.isEmpty
意味着您还有一个字符需要处理。
最后,你总是 return ""
而不是实际结果。
像这样的东西应该可以工作:
str match {
case "" => r
case s => rev(s.tail, s.head + r)
}
如评论中所述,像这样操作字符串的性能不是很好。因此,在现实生活中,您可能希望将其转换为列表,反转列表,然后 .mkstring
将其放回原处。
我创建了使用 scala 的尾递归反转字符串的函数
def reverseString(str:String) = {
@tailrec
def reverseStringHelper(strTail:List[Char],reversedString :List[Char]):List[Char] = {
strTail match {
case Nil => reversedString
case head :: tail => {
reverseStringHelper(tail,head :: reversedString)
}
}
}
reverseStringHelper(str.toList,List[Char]()).mkString
}
如果您觉得回答有帮助,请采纳。
Github要点:https://gist.github.com/Deepak-nebhwani/0f0981027b61ff9f50904662614e7b7f
我正在尝试编写一个尾递归函数来反转字符串,这是代码,出于某些原因我不确定模式匹配条件是否阻止它获取反转字符串作为输出
def revstring(str:String):String={
@tailrec
def rev(str:String,r:String):String={
str match{
case s if s.head==null =>null
case x if x.tail.isEmpty => ""
case _=> rev(str.tail, str.head +r)
}
}
rev(str,"")}println(revstring("Mississipi"))
}
s.head
永远不会为空。如果字符串为空(或者如果它为 null,它 永远不会 - null 永远不应该真正出现在 scala 代码中),它将抛出异常。
此外,您 return 太早了 - x.tail.isEmpty
意味着您还有一个字符需要处理。
最后,你总是 return ""
而不是实际结果。
像这样的东西应该可以工作:
str match {
case "" => r
case s => rev(s.tail, s.head + r)
}
如评论中所述,像这样操作字符串的性能不是很好。因此,在现实生活中,您可能希望将其转换为列表,反转列表,然后 .mkstring
将其放回原处。
我创建了使用 scala 的尾递归反转字符串的函数
def reverseString(str:String) = {
@tailrec
def reverseStringHelper(strTail:List[Char],reversedString :List[Char]):List[Char] = {
strTail match {
case Nil => reversedString
case head :: tail => {
reverseStringHelper(tail,head :: reversedString)
}
}
}
reverseStringHelper(str.toList,List[Char]()).mkString
}
如果您觉得回答有帮助,请采纳。
Github要点:https://gist.github.com/Deepak-nebhwani/0f0981027b61ff9f50904662614e7b7f