簡體   English   中英

如何在Haskell中將while循環定義為高階函數?

[英]How can I define a while loop as a higher-order function in Haskell?

我面臨以下問題,有人可以給我一些提示嗎? 非常感謝!

定義while的高階函數,其中條件和運算作用於類型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函數(以檢查循環不變式是否仍然成立)和下一次迭代中的操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM