`take``x``i`procedure`drop``x``i`procedure`take`returns the first I elements of list X.`drop`returns all but the first I elements of list X.(take '(a b c d e) 2) => (a b) (drop '(a b c d e) 2) => (c d e)

X may be any value -- a proper, circular, or dotted list:

(take '(1 2 3 . d) 2) => (1 2) (drop '(1 2 3 . d) 2) => (3 . d) (take '(1 2 3 . d) 3) => (1 2 3) (drop '(1 2 3 . d) 3) => d

For a legal I,

`take`and`drop`partition the list in a manner which can be inverted with`append`:(append (take X I) (drop X I)) = X

`drop`is exactly equivalent to performing I cdr operations on X; the returned value shares a common tail with X. If the argument is a list of non-zero length,`take`is guaranteed to return a freshly-allocated list, even in the case where the entire list is taken,*e.g.*`(take lis (length lis))`.