grade_report.fsx en F#
Boletines desde un roster de records, un match con guardas y columnas.
// Average each student's scores and print a letter-grade report card.
type Student = { Name: string; Scores: int list }
let roster =
[ { Name = "Ada"; Scores = [92; 88; 97] }
{ Name = "Grace"; Scores = [84; 91; 78] }
{ Name = "Alan"; Scores = [70; 66; 74] }
{ Name = "Edsger"; Scores = [58; 67; 61] } ]
let average student =
student.Scores |> List.sumBy float
|> fun total -> total / float (List.length student.Scores)
let letter avg =
match avg with
| a when a >= 90.0 -> "A"
| a when a >= 80.0 -> "B"
| a when a >= 70.0 -> "C"
| a when a >= 60.0 -> "D"
| _ -> "F"
printfn "student avg grade"
for s in roster |> List.sortBy (fun s -> s.Name) do
let avg = average s
printfn "%-8s %4.1f %s" s.Name avg (letter avg)
let classAvg =
roster |> List.collect (fun s -> s.Scores)
|> List.averageBy float
printfn "Class average: %.1f" classAvg
Cómo funciona
Studentes un record; el roster es un literal de lista.lettercalifica por una escalera de guardaswhen.List.collectjunta cada puntaje para el promedio del curso.
Palabras clave y builtins usados aquí
dofloatforfuninletlistmatchstringtypewhenwith
El intento, en números
- Líneas
- 31
- Caracteres a escribir
- 843
- Tokens
- 248
- Ritmo de tres estrellas
- 60 tpm
Al ritmo de tres estrellas de 60 tokens por minuto, este intento toma unos 248 segundos.
Paso 2 de 3 en Bis; paso 26 de 27 en Fundamentos del lenguaje.