如何使用haskell创建三角形区域

时间:2013-08-26 17:11:37

标签: haskell

您好我想问一下如何在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) 

1 个答案:

答案 0 :(得分: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 我使用了putStr,它没有启动换行符来使用更少的括号!