Salut tout le monde !

Je dois réaliser une fonction qui me donne le énième cdr d'une liste. Cette fonction doit être récursive bien sur.
J'ai déjà fait une première version mais pas du tout récursive :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
(defun recup (x liste)
  (cond
    ((atom liste) 0)
    ((equal x 0) (print liste))
    ((if (< x 0) nil))
    ((equal x 1)(cdr liste))
    ((equal x 2)(cddr liste))
    ((equal x 3)(cdddr liste))
    ((equal x 4)(cddddr liste))
    ((equal x 5)(cdr(cddddr liste)))))
recup
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
(recup 2 '(a b c))
(c)
 
(recup -1 '(a b c))
nil
 
(recup 4 '(a b c))
nil
Quand a réaliser une deuxième version mais récursive...je bloque
J'ai quelque piste mais je vois pas trop comment faire.
Je devrais peut être utiliser un tant que et me servir de la fonction prédéfini length....

Est-ce que quelqu'un pourrait m'aider a monter ma fonction ?