func (list *Pair) DropWhile(predicate func(interface{}) bool) (result *Pair) {
	for result = list; result != nil; result = result.Cdr.(*Pair) {
		if !predicate(result.Car) {
			return
		}
	}
	return
}
DropWhile drops the longest initial prefix of list whose elements all satisfy predicate,
and returns the rest of the list.

func even(x interface{}) bool {
return x.(int)%2 == 0
}

List(2, 18, 3, 10, 10, 22, 9).DropWhile(even) => (3 10 22 9)

The circular-list case may be viewed as "rotating" the list.
package list
func (list *Pair) Find(predicate func(interface{}) bool) (result interface{}, ok bool) {
	for pair := list; pair != nil; pair = pair.Cdr.(*Pair) {
		car := pair.Car
		if predicate(car) {
			return car, true
		}
	}
	return nil, false
}
func (list *Pair) FindTail(predicate func(interface{}) bool) (result *Pair) {
	for result = list; result != nil; result = result.Cdr.(*Pair) {
		if predicate(result.Car) {
			return
		}
	}
	return
}
func (list *Pair) TakeWhile(predicate func(interface{}) bool) (result *Pair) {
	result, _ = list.Span(predicate)
	return
}
func (list *Pair) NTakeWhile(predicate func(interface{}) bool) (result *Pair) {
	result, _ = list.NSpan(predicate)
	return
}