APL Exercises 8 ⎕io←0 throughout.
8.0 Drills I {(⊂⍋⍵)⌷⍵} sorts up any array that can be sorted and {(⊂⍒⍵)⌷⍵} sorts down. Currently some APL arrays can not be sorted (e.g. array of complex numbers). Predict the result of each expression before evaluating it.
8.1 Sorting Without Using ⍋ ⍒ a. Write a function sortb b to sort a boolean vector b without using ⍋ (or ⍒). b. Write a function sorta a to sort a vector a of letters from the uppercase alphabet ⎕a without using ⍋ (or ⍒). c. Write a function sort1 s to sort a vector s of 1-byte integers (integers in the range ¯128+⍳256) without using ⍋ (or ⍒). In practice, you would use ⍋ or ⍒ to sort vectors
from small domains. The above are for exercise only.
8.2 Quicksort Quicksort on numeric vectors can be coded as follows: Q←{1≥≢⍵:⍵ ⋄ (∇(⍵<p)⌿⍵),((⍵=p)⌿⍵),(∇(⍵>p)⌿⍵) ⊣ p←⍵⌷⍨?≢⍵} Q 3 1 4 1 5 9 2 6 5 3 5 8 9 7 9 1 1 2 3 3 4 5 5 5 6 7 8 9 9 9 Explain in words what each part of the function does.
Derive Q1 from Q by removing the commas
(thereby replacing catenation with stranding).
Apply Q1 several times to the same argument.
8.3 Grade APL does not have a primitive for sort but does have one for grade. A rationale for this arrangement is that you can use the result of grade to sort (re-order) something else, and of course to use the result of ⍋⍵ to sort ⍵ itself. For example, you can use ⍋ to sort a matrix which is not in the domain of ⍋ . f←{⍵⌷⍨⊂?200⍴≢⍵} x←⍪f 'Curry' 'Durant' 'Thompson' 'Green' 'Iguodala' x,←f ↓?10 2⍴10 x,←f ⎕a x,←f ?10⍴1000 ⍴x 200 4 5↑x ⍋x DOMAIN ERROR ⍋x ∧ Write a function to sort the matrix x above.
(Hint: use ⍋ on the mix of each column
to re-order the matrix, starting with the last column.)
|