La idea es que tenemos que saber si un string (en realidad lo hice con lista de caracteres) tiene sus paréntesis balanceados. Onda si abre uno lo tiene que cerrar y por supuesto, no puede comenzar cerrando.
Veamos como podemos solucionar esto en Scala:
def balance(palabra : List[Char]) : Boolean = {
def balanceAux(palabra : List[Char], n : Int) : Int = palabra match {
case List() => n
case '('::tail => balanceAux(tail, n + 1)
case ')'::tail => if (n == 0) -1 else balanceAux(tail, n - 1)
case _::tail => balanceAux(tail, n)
}
balanceAux(palabra, 0) == 0
}
Se puede ver que el ultimo case tiene el valor que no es un paréntesis, cualquier otra letra y esto lo decimos con "_"
Es un ejemplo bastante pavo, pero podemos ver la potencia que tiene Pattern matching