typestar

Guardas y where en Haskell

Convierte un semestre de puntajes de examen en una nota con letra y un comentario adjunto.

-- Guards pick a branch by Boolean test; otherwise is a synonym for True.
module ExamGrades where

grade :: [Int] -> String
grade scores
  | average >= 90 = "A" ++ note
  | average >= 80 = "B" ++ note
  | average >= 70 = "C" ++ note
  | otherwise     = "F" ++ note
  where
    -- One where block, shared by every guard in the equation above.
    average = sum scores `div` max 1 (length scores)
    best = maximum (0 : scores)
    note
      | average == best = " (steady all term)"
      | otherwise       = " (best was " ++ show best ++ ")"

Cómo funciona

  1. Cada guarda compara average contra un corte y la última es otherwise.
  2. El bloque where vincula average y best una sola vez para las cuatro guardas.
  3. note tiene sus propias guardas y compara average == best para elegir cómo redactarse.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
16
Caracteres a escribir
504
Tokens
96
Ritmo de tres estrellas
75 tpm

Al ritmo de tres estrellas de 75 tokens por minuto, este intento toma unos 77 segundos.

Escribe este fragmento

Paso 2 de 3 en Coincidencia de patrones; paso 8 de 27 en Fundamentos del lenguaje.

← Anterior Siguiente →