我有这段代码:
loop height weight=do
line<-getLine
if line=="1" then
do
height<-getLine
loop height weight
else if line=="2" then
do
weight<-getLine
loop height weight
else if line=="3" then
do
putStrLn (height)
else
do
putStrLn "error"
有人告诉我有这么多“做”,我试着改变这段代码而不是用“做”:
loop height weight=
getLine>>=(\line->(
if line=="1" then
getLine>>=(\height->
loop height weight
else if line=="2" then
getLine>>=(\weight->
loop height weight
else if line=="3" then
putStrLn (height+weight)
else
putStrLn "error"))))
但是编译器告诉我如果行==“2”并且我无法解决它就会出现问题
你可以教我如何在没有“do”的情况下更改这段代码吗?
答案 0 :(得分:5)
我认为使用构造的大小会使你的代码更加清晰,但这只是个人选择。另外putStrLn(高度+重量)是不正确的,因为高度和重量是字符串,你将它们视为整数。也许你的意思是++?
loop height weight =
getLine >>= \line ->
case line of
"1" -> getLine >>= \height -> loop height weight
"2" -> getLine >>= \weight -> loop height weight
"3" -> putStrLn . show $ (read height :: Int) + (read weight :: Int)
_ -> putStrLn "error"