No se. Considera esto:
La regla de rasgo [A, B] extiende la Función1 [A, Opción [B]] {
condición val: A => booleano
salida val: B
def apply (en: A): Opción [String] =
if (condición (in)) Algunos (salida) más Ninguno
}
Regla de objeto {
def ejecutar [A, B] (en: A, reglas: Lista [Reglas [A, B]]): Lista [B] =
rules.map (_ (in)). flatten
}
clase de caso DividesRule (denom: Int, salida: String)
extiende la Regla [Int, String] {
anular la condición val = (_% denom == 0)
}
object Main extiende la aplicación {
reglas val = Lista (
DividesRule (3, “Fizz”),
DividesRule (5, “Buzz”)
)
1 a 100 foreach {i =>
Rule.run (i, rules) match {
caso Nil => println (i.toString)
case xs => println (xs.mkString (“”))
}
}
}
Ese es el infame rompecabezas FizzBuzz implementado con un solo bucle si y no, en Scala. Son solo definiciones y manipulación de secuencias con un poco de FP para darle sabor. La programación real va de una declaración de problema a una solución que funciona, solo usando control de flujo y abstracción.
- ¿Cómo saben las computadoras cuándo comienza y termina una cadena binaria?
- Cómo obtener el número de coprimos de n bajo n
- ¿Es posible construir un algoritmo (para ejecutar en una computadora con recursos de espacio finito) que tomará como entrada un flujo de lanzamientos de monedas al azar imparciales (probabilidad independiente de caras 1/2) y emitirá caras con probabilidad irracional esperada?
- ¿Qué tipo de algoritmo de Machine Learning usarías para segmentar a tus clientes en múltiples grupos?
- ¿Qué es el retroceso en un diseño de algoritmo?
No olvide que las estructuras de datos caen de definiciones, bucles e ifs.
No confundas la simplicidad con que sea fácil.
Además: no olvide que las cosas simples a menudo son absurdamente poderosas.