Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
haskell中的分析错误<- --bmi计算器 BMI计算器::IO() bmicaller=do bmicaller::(RealFloat a)=>a->a->String 输入“请输入您的体重” 重量_Haskell - Fatal编程技术网

haskell中的分析错误<- --bmi计算器 BMI计算器::IO() bmicaller=do bmicaller::(RealFloat a)=>a->a->String 输入“请输入您的体重” 重量

haskell中的分析错误<- --bmi计算器 BMI计算器::IO() bmicaller=do bmicaller::(RealFloat a)=>a->a->String 输入“请输入您的体重” 重量,haskell,Haskell,首先,你的压痕是错误的(也就是说:不存在)。do块的内容应缩进 然后你给了两个相互不匹配的类型签名。第二个在do块内部,它显然不属于该块 然后,您似乎在do块内使用模式保护,在任何模式匹配构造之外。这在语法上是无效的。您可能在那里遗漏了一个病例的体重指数。您还需要将=替换为-> 最后,在do-块之后的where块中,不能使用do块的局部变量。您应该在do-块中使用let。此外,weight和height是字符串,因此如果不先将它们转换为数字,就无法对它们进行算术运算。此外,您还希望将体重指数计算

首先,你的压痕是错误的(也就是说:不存在)。do块的内容应缩进

然后你给了两个相互不匹配的类型签名。第二个在do块内部,它显然不属于该块

然后,您似乎在do块内使用模式保护,在任何模式匹配构造之外。这在语法上是无效的。您可能在那里遗漏了一个
病例的
体重指数。您还需要将
=
替换为
->


最后,在
do
-块之后的where块中,不能使用do块的局部变量。您应该在
do
-块中使用
let
。此外,
weight
height
是字符串,因此如果不先将它们转换为数字,就无法对它们进行算术运算。

此外,您还希望将体重指数计算器与主功能分开,因为它是一个纯功能,没有任何副作用

weight<-getLine
main::IO()
main=do
输入“请输入您的体重”
w字符串

bmical体重身高| bmi你阅读的时间比你输入问题所需的时间要短。我知道计算方法和结果。但是我希望通过传递2个浮点值并返回字符串值的方式来实现,而不是if-else或case语句。感谢您的帮助,因为互联网上关于haskell的资料较少,我尝试合并不同的教程,因此我遇到了一些语法错误。我仍然是haskell的初学者。我想问一下如何声明小于case语句中的值?案例bmi为| bmi,而您可以使用
案例
(即
案例()我建议你把这个部分提取成纯函数,比如Yes,如果有帮助的话,请考虑一个赞成票,试着从真正了解它的人那里读很多Haskell代码——关于Haskell风格有一个堆栈溢出问题。
weight<-getLine
main :: IO ()
main = do
    putStrLn "Please Input your weight"
    w <- getLine
    let weight = read w :: Float
    putStrLn "Please Input your height"
    h <- getLine
    let height = read h :: Float
    putStrLn $ bmicalc weight height

bmicalc :: Float -> Float -> String
bmicalc weight height | bmi<=17.5 = "You are anorexic!"
                      | bmi<=20.7 = "You are underweight"
                      | bmi<=26.4 = "You are in normal range"
                      | bmi<=27.8 = "You are marginally overweight"
                      | bmi<=31.1 = "You are overweight"
                      | otherwise = "You are super OBESE!!"
                      where bmi=weight/(height*height)