-1

こんにちは、Haskell で長方形の領域を作成する方法を知りたいです。これは私のコードです

main = do
putStrLn"Enter base"
base <- getLine
putStrLn"Enter height"
height <- getLine
putStrLn("The area is: " ++ (height * base) /2)

エラーはステートメントにあります:

putStrLn("The area is : " ++(height *base) /2) 
4

1 に答える 1

9

まず、 の後にインデントし、do関数とその引数の間にスペースを使用する必要があります。

main = do
    putStrLn "Enter base"
    base <- getLine
    putStrLn "Enter height"
    height <- getLine
    putStrLn ("The area is: " ++  show ((read height * read base) /2))

主な問題は、Haskell ではデータが型間で自動的に変換されないため、文字列に対して数値演算を行うことができず、必要なものを明示する必要があることです。

(このタイプのコンパイル時チェックは、非常に多くのバグの原因を取り除きます。最初はうるさいように見えても、問題を早期に発見することをお勧めします。)

read数値を作成するには文字列が必要であり、showその結果を文字列に戻す必要があるため、show ((read height * read base) /2)

ちなみに、これは長方形ではなく三角形の面積を計算しているようです!

改善 - 純粋なコード

主な機能である三角形の計算を IO とは別のものにすると、コードが改善されるため、次のように記述します。

triangle base height = height * base / 2

main = do
    putStrLn "Enter base"
    base <- readLn      -- readLn is handy
    putStrLn "Enter height"
    height <- readLn
    putStr "The area is: "
    print (triangle base height)  -- print is also handy

readLnを実行し、結果getLineを使用readします。
printしてshowおりputStrLnます。より少ないブラケットを使用するために、改行を開始しない which
を使用しました!putStr

于 2013-08-26T18:11:36.587 に答える