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
- Cada guarda compara
averagecontra un corte y la última esotherwise. - El bloque
wherevinculaaverageybestuna sola vez para las cuatro guardas. notetiene sus propias guardas y comparaaverage == bestpara elegir cómo redactarse.
Palabras clave y builtins usados aquí
IntStringmodulewhere
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.
Paso 2 de 3 en Coincidencia de patrones; paso 8 de 27 en Fundamentos del lenguaje.