【发布时间】:2018-04-22 10:28:39
【问题描述】:
我正在尝试编写一个函数isums,它从用户那里读取n 数字并返回它们的总和。此外,在每个数字之后,都会打印该数字的总和。到目前为止我有这个:
isums :: Int -> IO Int
isums n = do
num <- readLn
putStrLn (show (num + sum))
sum <- isums (n - 1)
return (num + sum)
我也没有使用 IORef。
【问题讨论】:
-
使用
replicateM的解决方案更可取,而递归(如其他答案)是“函数式编程的跳转”。所以我建议用replicateM将“解决方案”标记切换到答案。 -
replicateM解决方案没有在每个数字后打印总和,因此它不是此特定功能的解决方案。 -
将显式递归等同于使用 goto 有点极端,但我喜欢这个想法。 :)
-
@Aelin 哦,错过了,抱歉。尽管如此,关于打印部分和的部分与
replicateM-one 是正交的。要获得这些,您可以将答案中的sum替换为scanl (+) 0。 -
@chepner 这个主意不是我的,是 Erik Meijer 的。