您好,我只想问如何在 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)
您好,我只想问如何在 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)
首先,您应该在 a 之后缩进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
String做一个数字,然后show
把结果转回String,所以这就是我们需要的原因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
which 不开始换行来使用更少的括号!