Есть несколько проблем с тем, что вы пытались:
- Вы используете
||
(оператор Or
) вместо |
(Pipe
оператор) для представления нескольких случаев, как прокомментировал @Luis - см. этот вопрос - Вы должны попытаться ссылаться на переменную при объединении нескольких регистров - см. этот вопрос
Итак, что вы действительно можете попробовать:
def isPaired(input: String): Boolean = {
def go(x: List[Char], level: Int = 0): Boolean = {
x match {
case Nil => true
case ('(' | '[' | '{') :: xs1 if level < 0 => false
case ')' :: xs1 if level == 0 => false
case ']' :: xs1 if level == 0 => false
case '}' :: xs1 if level == 0 => false
case '(' :: xs1 => go(xs1, level + 1)
case '[' :: xs1 => go(xs1, level + 1)
case '{' :: xs1 => go(xs1, level + 1)
case ')' :: xs1 => go(xs1, level - 1)
case ']' :: xs1 => go(xs1, level - 1)
case '}' :: xs1 => go(xs1, level - 1)
case _ :: xs1 => go(xs1, level + 1)
}
}
go(input.toList)
}
Или даже более сжато:
def isPaired(input: String): Boolean = {
def go(x: List[Char], level: Int = 0): Boolean = {
x match {
case Nil => true
case ('(' | '[' | '{') :: xs1 if level < 0 => false
case (')' | ']' | '}') :: xs1 if level == 0 => false
case ('(' | '[' | '{') :: xs1 => go(xs1, level + 1)
case (')' | ']' | '}') :: xs1 => go(xs1, level - 1)
case _ :: xs1 => go(xs1, level + 1)
}
}
go(input.toList)
}