map := (fn array | result := (); for array (v | result = result & (| fn v) ); result); drop := (n arr | arr.(range n (len arr))); take := (n arr | arr.(up n)); filter := (predicate arr | arr.(map predicate arr));