-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

首先,您应该在 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 中,数据不会在类型之间自动转换,因此您不能对字符串进行数值运算,并且必须明确说明您想要什么。

(这种类型的编译时检查消除了大量的错误来源——最好尽早发现问题,即使一开始看起来很挑剔。)

我们需要对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

readLngetLine然后使用结果read
printshow然后putStrLn
我用putStrwhich 不开始换行来使用更少的括号!

于 2013-08-26T18:11:36.587 回答