2011-10-23 4 views
1

私はユーザー(x、y)から2つの変数を取得する簡単な関数を作ろうとしています。
は計算を行い、それを出力します。成功せずに何らかの理由で
Haskellで簡単な数式を試してみよう

main = do 
    putStrLn "Insert Number1" 
    x <- readLn 
    putStrLn "Insert Number2" 
    y <- readLn 
    z = (x * y * 0.01) 
    putStrLn "Result: " ++z 

エラー私が取得:

test.hs:6:11: parse error on input `=' 
+0

このエラーは、 'z = ...'の定義に 'let'キーワードを付ける必要があるためです。 – hvr

答えて

9

は、新しい変数をバインドするletを使用してください。最終的には、DoubleStringの間で明示的に変換する必要があります(たとえば、showなどを使用)。第2に、優先順位を覚えておく必要があります。 Haskellでは、関数のアプリケーションはレコードの更新以外のものよりも厳密に束縛されるので、あなたが書いたものは(putStrLn "Result: ") ++ zと解釈されます。これは意味をなさないものです。これらは固定されています:

main = do 
    putStrLn "Insert Number1" 
    x <- readLn 
    putStrLn "Insert Number2" 
    y <- readLn 
    let z = x * y * 0.01 
    putStrLn ("Result: " ++ show z) 
+2

haskellコンパイラが '0.01'の型と関数'(*) 'によって' x'と 'y'の型を推論できるというのは本当にクールなことです。そうでなければ 'x < - readLn :: IO Double'と' y < - readLn :: Io Double'と指定する必要があります。 – epsilonhalbe

+0

sily質問: "load test.hs"を実行しようとしましたが、何も起こりません。私はxとyの変数を入力すると思いますか? – Asaf

+0

@Asafファイルをロードした後、 'main'を実行します。 –

関連する問題