次のスニペットでは、Haskellで書いた2つのコラッツ関数を見ることができます。再帰的なアプリケーションでは、最初の例(collatz)で括弧を使用して、正しい優先順位を取得しました。
$で関数適用を学んだばかりなので、それを使って関数(collatz')を書き直そうとしました。ただし、次のエラーが発生します。
期待されるタイプ`[a]'を推測されるタイプ`a1->[a1]'と一致させることができませんでした`(:)'の2番目の引数、つまり` collatz'' `($)'の最初の引数、つまり`n:コラッツ''式の中で:n:コラッツ'$ n` div` 2
collatz :: (Integral a) => a -> [a]
collatz 1 = [1]
collatz n | even n = n : collatz (n `div` 2)
| otherwise = n : collatz (n * 3 + 1)
collatz' :: (Integral a) => a -> [a]
collatz' 1 = [1]
collatz' n | even n = n : collatz' $ n `div` 2
| otherwise = n : collatz' $ n * 3 + 1
これがうまくいかなかったのは私には奇妙なことになりました。だから私はうまくいった同様の例を試しました:
True : [even $ 3 `div` 3]
誰かがそれを見て、私が間違っていることを教えてくれたら、私はそれを感謝します。