私はこの関数を取得し、反復と takeWhile を使用して小さな実装を作成しようとしています。これらの関数を使用する必要はありません。実際には、1 行に変換しようとしているだけです。パターンは見えますが、基本的に同じコードを作成せずに、再帰の代わりに繰り返しを使用するだけで、それを悪用することはできないようです。
fun2 :: Integer -> Integer
fun2 1 = 0
fun2 n
| even n = n + fun2 (n `div` 2)
| otherwise = fun2 (3 * n + 1)
どんな助けでも素晴らしいでしょう。私は何時間もこれに苦労してきました。ありがとう