私は次の問題に直面しています、誰かが私にいくつかのヒントを与えることができますか? 本当にありがとう!
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 のような言語では、ループは必ずしも必要ではありません。もしそうなら、それはあなたが自分のアイデアを必須の方法で実装しようとしていることを意味しますが、これは必ずしも正しいことではありません.
簡単に言うと、あなたが何をしているのかわからないので、いくつかのそのようなループを定義するloopsライブラリを見ることができます。
これは、Simon Thompson の本 The Craft of Functional Programming の演習の 1 つです。私もこの問題に苦労しましたが、これが私が思いついたものであり、これが最善の答えであるとは決して主張しませんが、少なくともヒントを提供する可能性があります.
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 関数 (ループ不変条件がまだ保持されているかどうかを確認するため) と次の反復でのアクション。