我面临以下问题,有人可以给我一些提示吗?非常感谢!
定义高阶函数while
,其中条件和操作对 type 的值起作用a
。它的类型应该是
whileG :: (a -> IO Bool) -> (a -> IO a) -> (a ->IO a)
我面临以下问题,有人可以给我一些提示吗?非常感谢!
定义高阶函数while
,其中条件和操作对 type 的值起作用a
。它的类型应该是
whileG :: (a -> IO Bool) -> (a -> IO a) -> (a ->IO a)
在像 haskell 这样的语言中,您不一定需要循环。如果你这样做了,那意味着你正试图以一种命令式的方式实现你的想法,这并不总是正确的做法。
简而言之,因为我不知道您在做什么,您可以查看定义了几个这样 的循环的循环库。
看起来这是 Simon Thompson 的《函数式编程的工艺》一书中的练习之一。我也为这个问题苦苦挣扎,这就是我想出的,我绝不声称这是最好的答案,但至少可以提供一个提示。
whileG :: (a -> IO Bool) -> (a -> IO a) -> (a -> IO a)
whileG testIO action x = do
test <- testIO x
if test
then do
y <- action x
whileG testIO action $ y
else return x
我在这里假设在“循环”的每次迭代中都完成了一些计算,并且该计算的结果(类型为 a)被输入到 testIO 函数(以检查循环不变量是否仍然成立)和下一次迭代中的动作。