C標準ライブラリにおけるqsortの外部仕様についての質問
Posted: 2008年7月06日(日) 21:09
初めまして。表記の件について質問させて頂きます。
C標準ライブラリにqsort関数というのがあるかと思いますが、この関数の
第4引数に与える比較関数について要求される仕様について、不明な点が
ありましたのでご教授お願いします。
http://www.bohyoh.com/CandCPP/C/Library/qsort.html
の記述によれば、比較関数は
「第1引致が第2引数より小さい/等しい/大きいとみなされるとき、
それぞれ0より小さい/等しい/大きい整数を返すこと。」
と規定されていると読み取れます。
しかし、この記述のみからだと、比較関数が推移律を満たすこと…
すなわち、「任意の比較対象A,B,Cに対し、
A<BかつB<CならばA<C」が成立することを要請していないように読み取れます。
(例えば、『グー、チョキ、パー』という比較対象に対し、比較関数の戻り値を
「じゃんけんにおける勝敗(勝ち=1、引き分け=0、負け=-1)」と定義すれば
比較関数自体は(プロトタイプ宣言に反しない形式で)定義可能かと思われます。)
以上を踏まえた上で質問です。
1.qsort関数は、「比較関数に対し、推移律を満たすことを要請する」ことが
関数の外部仕様として定められているのでしょうか?
定められている場合、その記述がある資料もご提示頂けると助かります。
2.qsort関数が「比較関数に対し、推移律を満たすことを要請しない」場合、
推移的でない比較関数とレコード群に対し、実行結果はどのように
定義されているのでしょうか?
(1)明示的な未定義(仕様上「未定義」と記述されている。)
(2)暗黙的な未定義(どこにも記述がないため、どう動くかは実装次第である。)
(3)不定(どのように動いてもよいと仕様で定められている。)
(4)「こう動くべき」という規定がある。
こちらも、該当する資料がありましたらご提示頂けると助かります。
#自分なりにネット上で検索して調べてみたのですが、BohYoh.comのページ位しか
#見つけることが出来ませんでした…。
以上、お手数ですが回答のほうよろしくお願いします。
C標準ライブラリにqsort関数というのがあるかと思いますが、この関数の
第4引数に与える比較関数について要求される仕様について、不明な点が
ありましたのでご教授お願いします。
http://www.bohyoh.com/CandCPP/C/Library/qsort.html
の記述によれば、比較関数は
「第1引致が第2引数より小さい/等しい/大きいとみなされるとき、
それぞれ0より小さい/等しい/大きい整数を返すこと。」
と規定されていると読み取れます。
しかし、この記述のみからだと、比較関数が推移律を満たすこと…
すなわち、「任意の比較対象A,B,Cに対し、
A<BかつB<CならばA<C」が成立することを要請していないように読み取れます。
(例えば、『グー、チョキ、パー』という比較対象に対し、比較関数の戻り値を
「じゃんけんにおける勝敗(勝ち=1、引き分け=0、負け=-1)」と定義すれば
比較関数自体は(プロトタイプ宣言に反しない形式で)定義可能かと思われます。)
以上を踏まえた上で質問です。
1.qsort関数は、「比較関数に対し、推移律を満たすことを要請する」ことが
関数の外部仕様として定められているのでしょうか?
定められている場合、その記述がある資料もご提示頂けると助かります。
2.qsort関数が「比較関数に対し、推移律を満たすことを要請しない」場合、
推移的でない比較関数とレコード群に対し、実行結果はどのように
定義されているのでしょうか?
(1)明示的な未定義(仕様上「未定義」と記述されている。)
(2)暗黙的な未定義(どこにも記述がないため、どう動くかは実装次第である。)
(3)不定(どのように動いてもよいと仕様で定められている。)
(4)「こう動くべき」という規定がある。
こちらも、該当する資料がありましたらご提示頂けると助かります。
#自分なりにネット上で検索して調べてみたのですが、BohYoh.comのページ位しか
#見つけることが出来ませんでした…。
以上、お手数ですが回答のほうよろしくお願いします。