你好我只想问一下如何在Haskell中创建一个矩形区域.这是我的代码
main = do
putStrLn"Enter base"
base <- getLine
putStrLn"Enter height"
height <- getLine
putStrLn("The area is: " ++ (height * base) /2)
Run Code Online (Sandbox Code Playgroud)
错误在声明中:
putStrLn("The area is : " ++(height *base) /2)
Run Code Online (Sandbox Code Playgroud)
首先,你应该在a之后缩进do,并在函数和它们的参数之间使用空格.
main = do
putStrLn "Enter base"
base <- getLine
putStrLn "Enter height"
height <- getLine
putStrLn ("The area is: " ++ show ((read height * read base) /2))
Run Code Online (Sandbox Code Playgroud)
主要问题是在Haskell中,数据不会在类型之间自动转换,因此您无法对字符串进行数值运算,并且必须明确您想要的内容.
(这种类型的编译时检查消除了很多错误来源 - 最好尽早发现问题,即使它最初看起来很挑剔.)
我们需要readString来创建一个数字,然后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
Run Code Online (Sandbox Code Playgroud)
readLn做了getLine然后使用read上的结果.
print是的show,然后putStrLn.
我使用过putStr哪个不会使用更少的括号开始换行!