您好我想问一下如何在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)
答案 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
,它没有启动换行符来使用更少的括号!