Perl を使い始めて数年になり、雑誌の隅っこに載る程度のフリーソフトなら作るようにもなりましたが、未だにソート関数の内部構造がさっぱり分かりません(^_^;
Perl の解説本も数冊、ホームページに至っては十数ほども有名と言われているところを回ってみましたが、ほとんどの Perl ユーザーがソート関数の使い方を丸覚えにしているようで、的を得ない解説しか載ってません。
そこで質問ですが、$a と $b には、いったい「何が」「どういうタイミングで」入ってきているのでしょうか?(配列の値が比較されるときに呼び出される、ということは分かりますが)
当たり前に考えれば、ソート関数というものは全てをユーザーに任せて関数を書かせるか、でなければフルオートで全てやってくれるソート関数を用意するか、どちらか1方しかないはずです。
なのに、Perl のソート関数は途中部分だけユーザーに書かせるという器用なことをやってます。
これはいったいどういう構造になっているのでしょう?
No.1ベストアンサー
- 回答日時:
> 当たり前に考えれば、ソート関数というものは全てをユーザーに任せて関数を書かせるか、でなければフルオートで全てやってく
> れるソート関数を用意するか、どちらか1方しかないはずです。
そのふたつ以外に、もうひとつ当たり前があります。
ソートは、要素の大小比較をして、逆転していれば要素を入れ替える、という
ことをやるわけですが、「要素の大小比較」というのは、ときと場合によって
いろいろ変わります。
というわけで、その変わるところ、つまり「やり方」をソート関数に渡すという
方法があります。
これは perl に限ったことでは無いのですが、(もう、古い言い方なんですが)
コールバック処理と言います。
ある処理(この場合は大小比較)を呼び出す側で用意して、何らかの処理(ソート)
から呼び出す、つまり、呼び戻すように見えることから、この名前がついています。
処理自体を指定する手段がある言語の標準的なソートは、大体こういう形式
になってます。私が知っているところだと C/C++、ruby なんかがそうです。
ありがとうございます。
もしかして、比較結果で入れ替えるかどうか判断してるだけなんでしょうか(笑)
だとしたら俺は何を悩んでいたのだろう(^_^;
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excel 効率的な名簿と得点の管理の仕方 8 2022/08/07 08:15
- Perl perlでリテラル値はメモリにどのように格納されているか? 1 2023/01/15 20:45
- Excel(エクセル) 結合セルのソートについて 5 2022/04/22 11:57
- Excel(エクセル) Excelの50音順ソートを全ての行列に適用するには? 4 2022/12/05 11:28
- Excel(エクセル) 重複しているか否かをソートせずに判断する方法ありますか? 2 2022/07/06 21:16
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、写真のプログラムをどう直せ 2 2022/07/09 21:13
- C言語・C++・C# メインプログラムに#include <algorithm>を書いて、 そのメインプログラムが // 3 2023/05/02 11:24
- Excel(エクセル) Excelのソート(並べ替え) 2 2022/05/15 22:54
- Excel(エクセル) Excelで全クラスのランキング表を作成したい 4 2022/05/24 15:28
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
perlをバージョンアップしたら...
-
ファイルアイコンの左下に緑の□...
-
perlプログラミング 空白行削除
-
perlの構文でカンマの意味が分...
-
英数文字列のうちの数値を4桁に...
-
テキストファイルで提出とは?
-
Perlのエラーについてご教授く...
-
AI sisterとは、偽物の人ですか?
-
perlのrequireの動き方について...
-
perlのプログラミング 部分入れ...
-
Strawberry Perl for Windows ...
-
arduino の割り込み処理について
-
アルファベットに付いて質問し...
-
#!/usr/bin/perlで書きだしたCG...
-
perlのflock関数でロックをかけ...
-
bashスクリプト
-
perlでリテラル値はメモリにど...
-
perlで2次元配列をサブルーチ...
-
Perlで時間の計算
-
perlについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
access adoのトランザクション
-
gitでコミットするタイミングが...
-
ActivePerl+SQLServerでトラン...
-
VB + oracle oo4o でのトラン...
-
漢字を含む文字列のソート
-
Accessのマクロでモジュールを...
-
Access VBAで行ラベルが定義さ...
-
エクセルVBAでUserFormを起動し...
-
今日の日付が入った行のデータ...
-
VBA プロシージャの名前の取得
-
キャッシュを使わずにSELECTを...
-
sqlplusでヘッダーが付かない
-
Accessの数値から時間に変換す...
-
ODBCリンクの際にACCESSでは読...
-
Statement ignored というエラー
-
SQLで部分的にGROUP BYしたいとき
-
PL/SQLカーソルの2重FORループ...
-
SQLサーバで和暦から西暦に変換...
-
likeとsubstrの使いわけについて
-
全角空白のTRIMができない...
おすすめ情報