素朴な疑問ですが、関数が等しいとはどういう状況のことをいうのでしょうか。
あるいは、関数の等価性についてどのように定義すれば良い(定義すべき)なのでしょうか。
例えば、関数f
,g
が等価であるとは、f
とg
の中で行なっている処理が等しいと定義すると、
次の2つの関数は、入出力は等しいですが異なる関数ということになります。
f x = x * 2 g x = x + x
また、関数f
,g
が等価であることを、それぞれの関数の入出力が等しいと定義すると、
すべてのソートアルゴリズムを使った関数bubbleSort
, quickSort
, mergeSort
などはすべて「同じ関数」ということになります。
もし、関数を、定義されているメモリ上のアドレス(ちょっと言い方が変ですが)によって等価性を判別しようとすると、同じ処理を行う関数を別の名前で2つ作成すると、それらは全く同じでありますが異なる関数ということになります。
色々な解釈があると思いますが、妥当な方法はあるのでしょうか。関数型プログラミングでは関数を第一級オブジェクトとして扱うことがあるので、関数同士の比較(==
,!=
)も定義できるのかと思い、質問させていただきます。
回答5件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/08/30 12:58