splice n1 n2 Connects n1 and n2 so that next n1 == n2 && prev n2 == n1. This can be used to connect two discrete lists, or, if used on two nodes within the same list, it can be used to separate the nodes between n1 and n2 from the rest of the list. In this case, those nodes become a discrete list by themselves. This is an O(1) operation.
skip n i Return the node that is i nodes after node n in the list. If i is negative then return the node that is i nodes before node n in the list. This is an O(N) operation.
Accumulate a value over the entire list. This works like List.fold_right, but since the list is bidirectional, it doesn't suffer the performance problems of List.fold_right. This is an O(N) operation.
Allocate a new list, with entirely new nodes, whose values are the transforms of the values of the original list. Note that this does not modify the given list. This is an O(N) operation.
filter p l returns a new list, with entirely new nodes, whose values are all the elements of the list l that satisfy the predicate p. The order of the elements in the input list is preserved.
val filter_map : ('a->'b option)->'anode_t->'bnode_t
filter_map f l calls (f a0) (f a1) ... (f an) where a0,a1...an are the elements of l. It returns a new list of elements bi such as f ai = Some bi (when f returns None, the corresponding element of l is discarded).
Create a reverse enum of the list. The enumeration starts with the current element of the list: rev_enum (of_list [1;2;3;4]) will generate the enumeration [1;4;3;2].
If you want it to start with the last one, see backwards.
Note that modifying the list while the enum exists will have undefined effects. This is an O(1) operation.