MSDN: Lists in F# are
implemented as singly linked lists, which means that operations that access
only the head of the list are O(1), and element access is O(n).
Wikipedia: In Standard
ML, lists are
represented as imbalanced binary trees, and thus it is efficient to prepend
an element to a list, but inefficient to append an element to a list. The
extra pass over the list is a linear time operation, so while this technique
requires more wall clock time, the asymptotics are not any worse.