Usted no puede expresar la inversa de una función, pero se puede expresar la inversa de su resultado y tal vez eso le conviene.
Esto puede ser útil cuando se pasa la función.
Por ejemplo, si tiene una función f: Int => Boolean
que está utilizando como parámetro en una función de orden superior, se puede envolver en otra función del mismo tipo que x => !f(x)
justs devuelve el inverso del resultado calculado:
def select(ls: List[String], p: String => Boolean): List[String] =
ls.remove(x => !p(x))
// select: (ls: List[String], p: String => Boolean)List[String]
val li = List("one", "two", "three")
// li: List[java.lang.String] = List(one, two, three)
/* using select with some conditions */
select(li, _.length() > 3) // equivalent to select(li, x => x.length() > 3)
// res0: List[String] = List(three)
select(li, _.length() <= 3) // equivalent to select(li, x => x.length() <= 3)
// res1: List[String] = List(one, two)
/* using remove with the same conditions */
li.remove(_.length() > 3) // equivalent to li.remove(x => x.length() > 3)
// res2: List[java.lang.String] = List(one, two)
li.remove(_.length() <= 3) // equivalent to li.remove(x => x.length() <= 3)
// res3: List[java.lang.String] = List(three)
NOTA: remove
método en la clase List
es obsoleto y filterNot
se debe utilizar en su lugar, pero creo que en este ejemplo remove
simplemente lee mejor.
No necesita la función inversa para este ejercicio, piense en la definición matemática de existir: Mapa (S, f) = b | Existe c € S, f (c) = b. –
¿qué ocurre al crear su propia InvertibleFunction [Int, Int] – Edmondo1984