0

我面临以下问题,有人可以给我一些提示吗?非常感谢!

定义高阶函数while,其中条件和操作对 type 的值起作用a。它的类型应该是

whileG :: (a -> IO Bool) -> (a -> IO a) -> (a ->IO a)
4

2 回答 2

5

在像 haskell 这样的语言中,您不一定需要循环。如果你这样做了,那意味着你正试图以一种命令式的方式实现你的想法,这并不总是正确的做法。

简而言之,因为我不知道您在做什么,您可以查看定义了几个这样 的循环的循环库。

于 2012-09-30T07:25:29.240 回答
1

看起来这是 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 函数(以检查循环不变量是否仍然成立)和下一次迭代中的动作。

于 2013-03-16T23:20:06.463 回答