How to input an integer in haskell? (input in console)
19,144
Solution 1
Use getLine
or readLn
and then parse the input value to the type you need it to be like so :
mayor :: Int -> Int -> Double
mayor x y =
if x < y
then 0.1
else 0.3
compra :: Int -> Int -> Int -> Int -> Int -> Int -> Double
compra n v u iva p vp =
let valor_compra = (fromIntegral v) * (fromIntegral n) * (1 - mayor n u)
valor_iva = valor_compra * (fromIntegral iva) / 100
valor_puntos = fromIntegral (p * vp)
efectivo = if (valor_puntos < valor_compra) then valor_compra-valor_puntos else 0
in valor_iva + efectivo
main = do
putStrLn "enter value for x: "
input1 <- getLine
putStrLn "enter value for y: "
input2 <- getLine
let x = (read input1 :: Int)
let y = (read input2 :: Int)
print (compra x y 7 14 10 1500)
Solution 2
If the integers are entered on same line, we can do something like below. The below program reads two numbers separated by space and prints their sum.
main :: IO()
main = do
line <- getLine
let a = (read (takeWhile (/= ' ') line) :: Int)
let b = (read (drop 1 (dropWhile (/= ' ') line)) :: Int)
putStrLn (show (a+b))
Related videos on Youtube
Author by
delta1020
Updated on July 09, 2022Comments
-
delta1020 almost 2 years
How can I enter an integer in the console, store it in a variable and then pass it as a parameter of a function that I have created?
So far so that it works I had to do as follows:
In the last line you can see how I have been applying the function, what I want to do is to ask for the variables by console to be applied as integers to the function and then print the result.
mayor :: Int -> Int -> Double mayor x y = if x < y then 0.1 else 0.3 compra :: Int -> Int -> Int -> Int -> Int -> Int -> Double compra n v u iva p vp = let valor_compra = (fromIntegral v) * (fromIntegral n) * (1 - mayor n u) valor_iva = valor_compra * (fromIntegral iva) / 100 valor_puntos = fromIntegral (p * vp) efectivo = if (valor_puntos < valor_compra) then valor_compra-valor_puntos else 0 in valor_iva + efectivo main = do print (compra 20 2000 7 14 10 1500)
The way I do it gives me as a result 16920.0
-
delta1020 about 7 yearsThank you very much, it served me perfect