Aritmética entera y fraccionaria en Haskell
Prepara tazas con una bolsa de granos y mantiene separadas la aritmética entera y la fraccionaria.
-- div and mod are whole-number division; (/) refuses to touch an Int.
beansGrams :: Int
beansGrams = 250
cupsBrewed :: Int
cupsBrewed = beansGrams `div` 18
leftoverGrams :: Int
leftoverGrams = beansGrams `mod` 18
-- (*) binds tighter than (+), and fromIntegral lifts an Int to Double.
costPerCup :: Double
costPerCup = (14.5 + 2.0 * 3.25) / fromIntegral cupsBrewed
main :: IO ()
main = do
putStrLn (show cupsBrewed ++ " cups, " ++ show leftoverGrams ++ " g over")
print costPerCup
Cómo funciona
cupsBrewedusadivpara las tazas enteras yleftoverGramsusamodpara el resto.fromIntegral cupsBrewedeleva el conteo a Double para que(/)pase el chequeo de tipos.- El
(14.5 + 2.0 * 3.25)entre paréntesis muestra que la multiplicación liga más fuerte que la suma.
Palabras clave y builtins usados aquí
DoubleIOIntdo
El intento, en números
- Líneas
- 18
- Caracteres a escribir
- 485
- Tokens
- 68
- Ritmo de tres estrellas
- 80 tpm
Al ritmo de tres estrellas de 80 tokens por minuto, este intento toma unos 51 segundos.
Paso 2 de 3 en Valores y tipos; paso 2 de 27 en Fundamentos del lenguaje.