我现在通过在一些讲师网站上发现的一些练习,已经学习了几个月的Haskell,而我偶然发现了这个练习并且无法解决如何解决它。如何解决关于IO的Haskell练习
有两个任务有点“连接”。我很轻松地解决了第一个问题,但不太了解如何去做另一个问题。
这里的第一个:
练习2(在Haskell召回IO编程和做记号)
写递归函数
sumInts :: Integer -> IO Integer
从反复读整数IO直到给出数字0。 此时,该函数应该返回所有输入数字 加上原始(默认)值的总和,该值作为函数参数给出。
我解决了这个一个是这样的:
getInt :: IO Integer
getInt = do
s <- getLine
return (read s)
sumInts :: Integer -> IO Integer
sumInts input = do
x<-getInt
if x==0 then return input else (x+) <$> sumInts input
这是很容易做到的。这里是另一个,一个我无法理解:
练习3.推广了以前的IO互动成更高阶 功能
whileIO :: IO a -> (a -> Bool) -> (a -> a -> a) -> a -> IO a
其中,对于给定的读IO动作,终止条件,折叠功能, 和原始值,返回所需的IO动作。检查的 GETIO,condF,foldF的一些值,我们可以重新定义sumInts作为
sumInts = whileIO getIO condF foldF
很想一些帮助,这一个。 :)
,而不是'(X +)<$> sumInts input',你可以只是做'sumInts(X +输入)'。 ---“折叠”是指“积累”顺便说一句。 –
或者你可以完全删除'input'参数,用0代替基本情况,并在递归情况下写'sum(x +)<$> sumInts'。当然,因为问题规范要求您接受输入,所以您必须在'go'辅助功能或类似内容中执行我的建议。 – amalloy