Lambdas y secciones en Haskell
Una lambda es una función sin nombre; una sección es un operador con un operando ya puesto.
module Lambdas where
-- a lambda is a function with no name: backslash, argument, arrow, body
withSurcharge :: [Int] -> [Int]
withSurcharge = map (\cents -> cents + 75)
-- a section fixes one operand: (* 2) doubles whatever it is handed
peakFares :: [Int] -> [Int]
peakFares = map (* 2)
-- but (10 -) subtracts its argument from ten; (- 10) is a negative
transfersLeft :: [Int] -> [Int]
transfersLeft = map (10 -)
-- flip swaps the first two arguments, so 60 lands on the right of div
hoursFromMinutes :: Int -> Int
hoursFromMinutes = flip div 60
-- once a body branches, a named helper reads better than a lambda
zoneFare :: Int -> Int
zoneFare zones = if zones <= 1 then 250 else 250 + 125 * (zones - 1)
Cómo funciona
map (\cents -> cents + 75)pasa una lambda: contrabarra, argumento, flecha, cuerpo.map (* 2)ymap (10 -)son secciones, y(- 10)se leería como un número negativo y no como una resta.hoursFromMinutes = flip div 60pone 60 a la derecha dediv;zoneFarese ramifica y por eso lleva nombre propio.
Palabras clave y builtins usados aquí
Intelseifmodulethenwhere
El intento, en números
- Líneas
- 20
- Caracteres a escribir
- 709
- Tokens
- 94
- Ritmo de tres estrellas
- 70 tpm
Al ritmo de tres estrellas de 70 tokens por minuto, este intento toma unos 81 segundos.
Paso 3 de 3 en Orden superior; paso 15 de 27 en Fundamentos del lenguaje.