s.head
никогда не равно нулю.Он выдаст исключение, если строка пуста (или если она пустая, которой она никогда не должна быть - нуля никогда не должна появляться в scala-коде).Кроме того, вы возвращаетесь слишком рано - x.tail.isEmpty
означает, что у вас еще есть один символ для обработки.Наконец, вы всегда возвращаете ""
вместо фактического результата.
Примерно так должно работать:
str match {
case "" => r
case s => rev(s.tail, s.head + r)
}
Как уже упоминалось в комментарии, манипулирование строками, подобными этому, не очень производительно.Таким образом, в реальной жизни вы, вероятно, захотите преобразовать его в список, перевернуть список, а затем .mkstring
, чтобы собрать его обратно.