typestar

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

  1. case signal of va cubriendo por turno los constructores Green, Yellow y Red.
  2. Una rama comodín _ atrapa Dark y cae en el límite prudente.
  3. firstGreen [] y firstGreen (x:xs) separan la lista vacía de la cabeza y la cola.

Palabras clave y builtins usados aquí

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.

Escribe este fragmento

Paso 1 de 3 en Coincidencia de patrones; paso 7 de 27 en Fundamentos del lenguaje.

← Anterior Siguiente →