2017-02-13 20 views
2

コンソールに整数を入力して変数に格納し、それを作成した関数のパラメータとして渡すにはどうすればよいですか?これまでのところhaskellで整数を入力するには? (コンソールで入力)

それは私が次のようにしなければならなかった動作するように:

あなたは、私は関数を適用されたかを見ることができる最後の行では、私がやりたいことに、コンソールにより変数を求めることです関数に整数として適用し、結果を出力することができます。

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) 

私はそれを行う方法は、結果として私を与え 16920.0

+0

['readLn'](https://hackage.haskell.org/package/base-4.9.1.0/docs/Prelude.html#v:readLn)が役に立ちます。 – Ryan

答えて

1

使用getLineまたはreadLnとそのようにようになり、あなたがそれを必要とするタイプへの入力値を解析:

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) 
+1

ありがとう、完璧に仕えました – delta1020

関連する問題