{Record list_insertion:list_insertion_on_heap} Where Let (list_insertion_on_heap compare input) Let (insert sorted elem) Iterate {left right} From {[] sorted} Match right | `nil (LIST.reverse (elem :: left)) | `cons.{elem' right'} Match (compare elem elem') | `less (LIST.reverse_append left (elem :: right)) | _ Continue {(elem' :: left) right'} ; ; In (LIST.reduce input [] insert) Let (list_insertion_on_stack compare input) For (LIST.reduce input [] insert) Define (insert sorted elem) Match sorted | `nil [elem] | `cons.{elem' sorted'} Match (compare elem elem') | `less (elem :: sorted) | _ (elem' :: (insert sorted' elem)) ; ; Where Let LIST Package "list"