Haskell 将用户输入(整数)转换为条件打印语句

Haskell 将用户输入(整数)转换为条件打印语句,haskell,io,conditional-statements,getline,Haskell,Io,Conditional Statements,Getline,我试图从用户那里获取一个数值(范围为1-10),并使用条件语句(如果number>=1&&要删除第一个警告,请用空格替换制表符 要修复此错误,请将num添加到要删除第一个警告,请将选项卡替换为空格 要修复此错误,请将num添加到中,一个直接的问题是您编写: if num >=1 && <=3 if num >=4 && getLine <=7 else "Wrong health range indicated" 但是,我建议您查看case表达式或/和M

我试图从用户那里获取一个数值(范围为1-10),并使用条件语句(
如果number>=1&&要删除第一个警告,请用空格替换制表符


要修复此错误,请将
num
添加到
要删除第一个警告,请将选项卡替换为空格


要修复此错误,请将
num
添加到
中,一个直接的问题是您编写:

if num >=1 && <=3
if num >=4 && getLine <=7
else "Wrong health range indicated"
但是,我建议您查看
case
表达式或/和
MultiWayIf
,因为这可能是编写此代码的更好方法:

health :: IO ()
health = do
  putStrLn "State your health using numbers 1 - 10: "
  str <- getLine
  case read str of
    num | num >= 1 && num <= 3 -> putStrLn "Your health is poor"
    num | num >= 4 && num <= 7 -> putStrLn "Your health is OK"
    num | num >= 8 && num <=10 -> putStrLn "your health is fanstastic"
    _ -> putStrLn "Wrong health range indicated"
运行状况::IO()
健康=做
putStrLn“使用数字1-10说明您的健康状况:”
str=1&&num putStrLn“您的健康状况不佳”
num | num>=4&&num putStrLn“您的健康状况良好”
num | num>=8&&num putStrLn“你的健康是狂热的”
_->putStrLn“指示的运行状况范围错误”

一个紧迫的问题是您编写:

if num >=1 && <=3
if num >=4 && getLine <=7
else "Wrong health range indicated"
但是,我建议您查看
case
表达式或/和
MultiWayIf
,因为这可能是编写此代码的更好方法:

health :: IO ()
health = do
  putStrLn "State your health using numbers 1 - 10: "
  str <- getLine
  case read str of
    num | num >= 1 && num <= 3 -> putStrLn "Your health is poor"
    num | num >= 4 && num <= 7 -> putStrLn "Your health is OK"
    num | num >= 8 && num <=10 -> putStrLn "your health is fanstastic"
    _ -> putStrLn "Wrong health range indicated"
运行状况::IO()
健康=做
putStrLn“使用数字1-10说明您的健康状况:”
str=1&&num putStrLn“您的健康状况不佳”
num | num>=4&&num putStrLn“您的健康状况良好”
num | num>=8&&num putStrLn“你的健康是狂热的”
_->putStrLn“指示的运行状况范围错误”

您在这里会犯一些错误,主要是类型错误:

该行:

num <- getLine
在您的第一个
if
案例中:

if num >=1 && <=3
后来你写道:

if num >=1 && <=3
if num >=4 && getLine <=7
else "Wrong health range indicated"
最后,在
else
stament中,您将写下:

if num >=1 && <=3
if num >=4 && getLine <=7
else "Wrong health range indicated"
您可以将
putStrLn
out分解为:

health :: IO ()
health = do 
    putStrLn "State your health using numbers 1 - 10: "
    num <- readLn :: IO Int
    --putStrLn "Your health is: "
    putStrLn $
        if num <= 0 || num > 10 then "Wrong health range indicated"
        else if num <= 3 then "Your health is poor"
        else if num <= 7 then "Your health is OK"
        else "your health is fanstastic"
运行状况::IO()
健康=做
putStrLn“使用数字1-10说明您的健康状况:”

num您在这里会犯一些错误,主要是类型:

该行:

num <- getLine
在您的第一个
if
案例中:

if num >=1 && <=3
后来你写道:

if num >=1 && <=3
if num >=4 && getLine <=7
else "Wrong health range indicated"
最后,在
else
stament中,您将写下:

if num >=1 && <=3
if num >=4 && getLine <=7
else "Wrong health range indicated"
您可以将
putStrLn
out分解为:

health :: IO ()
health = do 
    putStrLn "State your health using numbers 1 - 10: "
    num <- readLn :: IO Int
    --putStrLn "Your health is: "
    putStrLn $
        if num <= 0 || num > 10 then "Wrong health range indicated"
        else if num <= 3 then "Your health is poor"
        else if num <= 7 then "Your health is OK"
        else "your health is fanstastic"
运行状况::IO()
健康=做
putStrLn“使用数字1-10说明您的健康状况:”

num preference
readLn
to
getLine
+
read
:当输入无法解析时,它会在异常情况下做正确的事情。在这种特殊情况下,这不重要,但养成一个好习惯。preference
readLn
to
getLine
+
read
:当输入c时,它会在异常情况下做正确的事情在这种情况下,这并不重要,但这是一个很好的习惯。