haskell中的分析错误<- --bmi计算器 BMI计算器::IO() bmicaller=do bmicaller::(RealFloat a)=>a->a->String 输入“请输入您的体重” 重量
首先,你的压痕是错误的(也就是说:不存在)。do块的内容应缩进 然后你给了两个相互不匹配的类型签名。第二个在do块内部,它显然不属于该块 然后,您似乎在do块内使用模式保护,在任何模式匹配构造之外。这在语法上是无效的。您可能在那里遗漏了一个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
-块之后的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)