case y formas de lista en Haskell
Lee un corredor de semáforos con expresiones case sobre un tipo suma.
-- case tries each pattern top to bottom and takes the first match.
module Signals where
data Signal = Green | Yellow | Red | Dark
speedLimit :: Signal -> Int
speedLimit signal = case signal of
Green -> 45
Yellow -> 25
Red -> 0
_ -> 15
-- Lists match by shape: [] is empty, (x:xs) splits head from tail.
firstGreen :: [Signal] -> Int
firstGreen [] = 0
firstGreen (x:xs) = case x of
Green -> speedLimit x
_ -> firstGreen xs
Cómo funciona
case signal ofva cubriendo por turno los constructoresGreen,YellowyRed.- Una rama comodín
_atrapaDarky cae en el límite prudente. firstGreen []yfirstGreen (x:xs)separan la lista vacía de la cabeza y la cola.
Palabras clave y builtins usados aquí
DarkGreenIntRedSignalYellow_casedatamoduleofwhere
El intento, en números
- Líneas
- 18
- Caracteres a escribir
- 438
- Tokens
- 67
- Ritmo de tres estrellas
- 75 tpm
Al ritmo de tres estrellas de 75 tokens por minuto, este intento toma unos 54 segundos.
Paso 1 de 3 en Coincidencia de patrones; paso 7 de 27 en Fundamentos del lenguaje.