f
の最小不動点を返すhsfix :: (a -> a) -> a
fix f = f (fix f)
hsfix :: (a -> a) -> a
fix f = let x = f x in x
let x_{n+1} = f x_n
のようなイメージから発想すれば、自然に↑のような定義になる_fix g
= g (fix g)
= g (g (fix g))
...
= g (g (g (g (... (g (fix g)) ...))))
(0:)
という関数を適用すれば、 0
の無限リストが得られるhs> fix (0:)
[0,0,0,0,0,..]
>"Grokking Fix"
>一見するとよく分からない fix 関数の挙動を、実際に不動点を求めたりリストの関数を実装したりモナドと組み合わせたりしながら、例を通して解説した記事