您好我刚开始使用haskell而且我遇到了涉及输入和输出的简单问题。 我试图向用户询问数学问题,在这种情况下:询问用户将数字37和53加在一起的结果。 如果他们输入正确的答案(90),程序将打印“优秀”,如果他们回答错误,将打印“抱歉” 我成功完成了这一部分。 我不明白该怎么做的是然后显示输出实际答案是什么,用户回答,最后是实际答案和用户答案之间的差异
//the GHCI shell
it should show:
*Main mathSkill
what is 37 + 53?
55
Sorry
'' here is where i want it to show the rest of the info"
非常感谢任何帮助
--the haskell code
mathSkill = do
let answer = 90
putStrLn "What is 37 + 53?"
result <- getLine
if (read result) /= answer
then putStrLn "Sorry"
else putStrLn "excellent"
答案 0 :(得分:1)
@bheklilr在这里敲响了一句:你的代码除了它的压力之外没有任何问题。如果你只想要一个单行,那么函数(>>)
和(>>=)
与do-notation的作用相同:
Prelude> putStrLn "What is 37 + 53?" >> getLine >>= \r -> if read r /= 90 then putStrLn "Sorry" else putStrLn "Excellent"
What is 37 + 53?
30
Sorry
这相当于:
do { putStrLn "What is 37 + 53?"; r <- getLine; if read r /= 90 then putStrLn "Sorry" else putStrLn "Excellent" }
如果你省略那些花括号和分号,Haskell允许你做一些类似Python但空白的东西。要在GHCi中进行多行输入,您需要从:{
开始,以:}
特殊行结束:
Prelude> :{
Prelude| do
Prelude| putStrLn "What is 37 + 53?"
Prelude| r <- getLine
Prelude| if read r /= 90
Prelude| then putStrLn "Sorry"
Prelude| else putStrLn "Excellent"
Prelude| :}
What is 37 + 53?
50
Sorry
Haskell将自动理解前两行应该独立,而if / then / else都是一个连贯的构造。