Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
|
|
@ -0,0 +1,97 @@
|
|||
use framework "Foundation"
|
||||
|
||||
-- SORTING LISTS OF ATOMIC (NON-RECORD) DATA WITH A CUSTOM SORT FUNCTION
|
||||
|
||||
-- In sortBy, f is a function from () to a tuple of two parts:
|
||||
-- 1. a function from any value to a record derived from (and containing) that value
|
||||
-- The base value should be present in the record under the key 'value'
|
||||
-- additional derivative keys (and optionally the 'value' key) should be included in 2:
|
||||
-- 2. a list of (record key, boolean) tuples, in the order of sort comparison,
|
||||
-- where the value *true* selects ascending order for the paired key
|
||||
-- and the value *false* selects descending order for that key
|
||||
|
||||
-- sortBy :: (() -> ((a -> Record), [(String, Bool)])) -> [a] -> [a]
|
||||
on sortBy(f, xs)
|
||||
set {fn, keyBools} to mReturn(f)'s |λ|()
|
||||
script unWrap
|
||||
on |λ|(x)
|
||||
value of x
|
||||
end |λ|
|
||||
end script
|
||||
map(unWrap, sortByComparing(keyBools, map(fn, xs)))
|
||||
end sortBy
|
||||
|
||||
-- SORTING APPLESCRIPT RECORDS BY PRIMARY AND N-ARY SORT KEYS
|
||||
|
||||
-- sortByComparing :: [(String, Bool)] -> [Records] -> [Records]
|
||||
on sortByComparing(keyDirections, xs)
|
||||
set ca to current application
|
||||
|
||||
script recDict
|
||||
on |λ|(x)
|
||||
ca's NSDictionary's dictionaryWithDictionary:x
|
||||
end |λ|
|
||||
end script
|
||||
set dcts to map(recDict, xs)
|
||||
|
||||
script asDescriptor
|
||||
on |λ|(kd)
|
||||
set {k, d} to kd
|
||||
ca's NSSortDescriptor's sortDescriptorWithKey:k ascending:d selector:dcts
|
||||
end |λ|
|
||||
end script
|
||||
|
||||
((ca's NSArray's arrayWithArray:dcts)'s ¬
|
||||
sortedArrayUsingDescriptors:map(asDescriptor, keyDirections)) as list
|
||||
end sortByComparing
|
||||
|
||||
|
||||
-- GENERIC FUNCTIONS ---------------------------------------------------------
|
||||
-- map :: (a -> b) -> [a] -> [b]
|
||||
on map(f, xs)
|
||||
tell mReturn(f)
|
||||
set lng to length of xs
|
||||
set lst to {}
|
||||
repeat with i from 1 to lng
|
||||
set end of lst to |λ|(item i of xs, i, xs)
|
||||
end repeat
|
||||
return lst
|
||||
end tell
|
||||
end map
|
||||
|
||||
-- Lift 2nd class handler function into 1st class script wrapper
|
||||
-- mReturn :: Handler -> Script
|
||||
on mReturn(f)
|
||||
if class of f is script then
|
||||
f
|
||||
else
|
||||
script
|
||||
property |λ| : f
|
||||
end script
|
||||
end if
|
||||
end mReturn
|
||||
|
||||
|
||||
-- TEST ----------------------------------------------------------------------
|
||||
on run
|
||||
set xs to ["Shanghai", "Karachi", "Beijing", "Sao Paulo", "Dhaka", "Delhi", "Lagos"]
|
||||
|
||||
-- Custom comparator:
|
||||
|
||||
-- Returns a lifting function and a sequence of {key, bool} pairs
|
||||
|
||||
-- Strings in order of descending length,
|
||||
-- and ascending lexicographic order
|
||||
script lengthDownAZup
|
||||
on |λ|()
|
||||
script
|
||||
on |λ|(x)
|
||||
{value:x, n:length of x}
|
||||
end |λ|
|
||||
end script
|
||||
{result, {{"n", false}, {"value", true}}}
|
||||
end |λ|
|
||||
end script
|
||||
|
||||
sortBy(lengthDownAZup, xs)
|
||||
end run
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
use AppleScript version "2.4" -- OS X 10.10 (Yosemite) or later
|
||||
use framework "Foundation"
|
||||
|
||||
set listOfText to words of "now is the time for all good men to come to the aid of the party"
|
||||
|
||||
set arrayOfStrings to current application's class "NSMutableArray"'s arrayWithArray:(listOfText)
|
||||
set descendingByLength to current application's class "NSSortDescriptor"'s sortDescriptorWithKey:("length") ascending:(false)
|
||||
set ascendingLexicographically to current application's class "NSSortDescriptor"'s sortDescriptorWithKey:("self") ascending:(true) selector:("localizedStandardCompare:")
|
||||
tell arrayOfStrings to sortUsingDescriptors:({descendingByLength, ascendingLexicographically})
|
||||
|
||||
return arrayOfStrings as list
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
use AppleScript version "2.3.1" -- OS X 10.9 (Mavericks) or later
|
||||
use sorter : script ¬
|
||||
"Custom Iterative Ternary Merge Sort" --<www.macscripter.net/t/timsort-and-nigsort/71383/3>
|
||||
|
||||
-- Sort customiser.
|
||||
script descendingByLengthThenAscendingLexicographically
|
||||
on isGreater(a, b)
|
||||
set lenA to a's length
|
||||
set lenB to b's length
|
||||
if (lenA = lenB) then return (a > b)
|
||||
return (lenB > lenA)
|
||||
end isGreater
|
||||
end script
|
||||
|
||||
set listOfText to words of "now is the time for all good men to come to the aid of the party"
|
||||
tell sorter to ¬
|
||||
sort(listOfText, 1, -1, {comparer:descendingByLengthThenAscendingLexicographically})
|
||||
return listOfText
|
||||
Loading…
Add table
Add a link
Reference in a new issue