関数型プログラミング言語Haskell Part13
■ このスレッドは過去ログ倉庫に格納されています
0857デフォルトの名無しさん
2011/02/12(土) 22:57:48fix :: (a -> a) -> a -> a
fix f x = let y = f x
in if x == y then x else fix f y
この関数 fix に例えば次のような関数を適用させるとします。
f :: a -> a
f x = if {x を使った述語} then x else {x を変化させた値}
fix f {a 型の適当な値} とやったとき、
もし関数 f の {x を使った述語} が真なら x そのものを返していますが、
それでも関数 fix 内の x == y では a 型の同値関数 (==) が適用されます。
この場合、x と y は同じものを指しているにもかかわらずです。
この挙動は当然と言えば当然なんですが、値ではなく、指している対象同士で
同じかそうでないかを比較する仕組みは作れないものでしょうか。
というのも、実際のところ a 型に相当するのが画像データを格納した
けっこう大きな Array 型なんです。
Array 型のソースを見てみましたが、(==) 関数の定義は重そうですし、実際重いです。
指している対象同士で比較できれば処理速度が速くなるのですが。
■ このスレッドは過去ログ倉庫に格納されています