2012-02-08 10 views
1

グレードアップ/ダウンAPL順

⍋'Hello' 

1 2 3 4 5 

とき

⌽(⍒'Hello') 

1 2 4 3 5 

であることを来るどのように?

私はAPLを初めて使いこなし、偶然にそれに遭遇しました。私はちょうど第二のものが最初のものの前に来る理由を勝った。

答えて

2

グレードアップとグレードダウンの両方をモナドプリミティブとして使用しています。 昇順に、次式のソート順序を指定するインデックスの整数配列を返し定義グレードアップすることにより

。要素が等しい場合(例では2文字)、入力式に現れたのと同じ順序で結果に表示されます。

したがって、⍋'Hello'1 2 3 4 5を返します。 2つのlは同じ順序であり、すなわち、第3文字(第1文字l)が第4文字(第2文字l)に先行する。

定義によりダウングレードも降順において、次式のソート順序を指定するインデックスの整数配列を返します。いずれかの要素が等しい場合(例では2文字)、それらは式に現れたのと同じ順序で結果に表示されます。

したがって、⍒'Hello'5 3 4 2 1を返します。 2つのlは等しいので、同じ順序で残ります。 ローテーションを適用すると、の整数配列は目撃された通り1 2 4 3 5に逆になります。

あなたが見ている結果は、関数が定義されている方法と同等の値をどのように扱うかによって、正確に予想される結果です。

もっと極端な例を見たい場合は、次の2つの配列の出力を比較してください。グレードダウン機能を試し、その後グレードアップ機能を試してみて、その後、10個の要素それぞれが1 10⍴1の同じ値を持つ配列を作成して:

⍋10⍴1 

⍒10⍴1 

を彼らは両方が得られます同じ結果:

1 2 3 4 5 6 7 8 9 10 
+0

同じスカラーが複数回連続して表示されても、何があっても低い値から高い値に戻るでしょうか? – f2lollpll

+0

はい。関数は、同じスカラーが現れる(それらは隣接する必要はない)ルールが必要であり、実装されたルールは、それらが提示された順序が正しいことを信頼することであり、それを保持します。それが低から高であると言っているのは本当に正しいとは言えません。それは左から右へと私は良いと思うでしょう。 –

0

グレードアップとグレードダウン⍒プリミティブは、等しい要素の順序を保持します。他の人が言っているように、等しい議論のための規則がなければならない。しかし、このルールには、複数キーの並べ替えができるという利点があります。 つまり、複数のキーが関連付けられた配列を持つ場合、各キーを最下位から最上位までソートすることで、最も重要なキーでソートされた結果が得られます。 3番目にソートされた1番目の2番目など。これを機能させるには、インデックスベクトルをキャプチャして、すべてのキーとデータを同期させて更新する必要があります。または、ネストされた構造に格納することもできます。この場合、自動的に適切な相対順序で保持されます。

+0

複数キーの条件を1つの効果的な比較関数にまとめると、不安定な並べ替えで問題なく機能します。 (唯一の意味は、すべての単一のキーで等しくなる要素が保存されていないということです)比較の際に考慮していないキーを保存するには、安定した並べ替えが必要です。例えば。姓でソートしますが、同じ姓のランでは、姓で安定したソートが必要な順番にファーストネームを保ちます。 – Kaz

関連する問題