Estoy haciendo tonterías con scala implementando algunos algoritmos comunes. Al intentar volver a crear una especie de burbuja me encontré con este problema¿Cómo puedo omitir este caso Nil
Aquí es una implementación de un bucle interno que burbujea el valor de la parte superior:
def pass(xs:List[Int]):List[Int] = xs match {
case Nil => Nil
case x::Nil => x::Nil
case l::r::xs if(l>r) => r::pass(l::xs)
case l::r::xs => l::pass(r::xs)
}
Mi problema es con el caso Nil => Nil
. Entiendo que necesito esto porque podría aplicar Nil
a esta función. ¿Hay alguna forma de garantizar que Nil
no se pueda proporcionar como argumento de manera que satisfaga al compilador para que pueda eliminar este caso?
Ah, bueno, no estaba al tanto de esto, ya que no conozco Scala :-) –
Tenga en cuenta que esto significa que no podrá aplicar esta función a valores 'List [Int]' en general, porque el compilador usualmente no está al tanto de si una 'Lista [Int]' determinada estará vacía o no en el tiempo de ejecución (para hacerlo, en general, se requiere resolver el Problema de Detención). La coincidencia de patrones es el mecanismo por el cual un valor general desconocido de 'List [Int] 'puede bajar dos ramas diferentes según si es' Nil' o ':: [Int]'.Eso significa que si está pasando listas como 'Lista [Int]', generalmente tendría que coincidir con el patrón cada vez que llame a 'pass'. – Ben
Y ni siquiera se puede llamar como 'pase (1 :: 2 :: Cero)' ... –