Initial data commit

This commit is contained in:
Ingy döt Net 2023-07-01 11:58:00 -04:00
parent 72d218235f
commit f23f22d71c
199087 changed files with 3378941 additions and 0 deletions

View file

@ -0,0 +1,11 @@
my_flatten({{1}, 2, {{3, 4}, 5}, {{{}}}, {{{6}}}, 7, 8, {}})
on my_flatten(aList)
if class of aList is not list then
return {aList}
else if length of aList is 0 then
return aList
else
return my_flatten(first item of aList) & (my_flatten(rest of aList))
end if
end my_flatten

View file

@ -0,0 +1,43 @@
-- flatten :: Tree a -> [a]
on flatten(t)
if class of t is list then
concatMap(flatten, t)
else
t
end if
end flatten
--------------------------- TEST ---------------------------
on run
flatten([[1], 2, [[3, 4], 5], [[[]]], [[[6]]], 7, 8, []])
--> {1, 2, 3, 4, 5, 6, 7, 8}
end run
-------------------- GENERIC FUNCTIONS ---------------------
-- concatMap :: (a -> [b]) -> [a] -> [b]
on concatMap(f, xs)
set lst to {}
set lng to length of xs
tell mReturn(f)
repeat with i from 1 to lng
set lst to (lst & |λ|(item i of xs, i, xs))
end repeat
end tell
return lst
end concatMap
-- 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

View file

@ -0,0 +1 @@
{1, 2, 3, 4, 5, 6, 7, 8}

View file

@ -0,0 +1,26 @@
on flatten(theList)
script o
property flatList : {}
-- Recursive handler dealing with the current (sub)list.
on flttn(thisList)
script p
property l : thisList
end script
repeat with i from 1 to (count thisList)
set thisItem to item i of p's l
if (thisItem's class is list) then
flttn(thisItem)
else
set end of my flatList to thisItem
end if
end repeat
end flttn
end script
if (theList's class is not list) then return theList
o's flttn(theList)
return o's flatList
end flatten