Besoin d'aide en lisp

Fermé
magnum_cl9 Messages postés 1 Date d'inscription mardi 21 août 2007 Statut Membre Dernière intervention 26 août 2007 - 26 août 2007 à 17:03
 syll - 26 juin 2008 à 18:08
bonjour à tous,

je suis entrain d'apprendre le langage LISP "Clisp", le debut été très bien, tout été bien clair, mais là je commence à rencontrer des complications... J'ai besoin de savoir comment construire une fonction en Clisp qui prend en argument une liste et retourne cette meme liste avec le premier element placé à la fin :exp
(a b c d) --> (b c d a)

j'ai pensé à faire un simple cons entre le "cdr" de la liste et son "car"... est ce faux??


et une autre fonction qui fait la meme chose pour les n premiers elements de la liste passée en argument (n est passée également en argument, exp:
( 3 '(a b c d e)) ---> (d e a b c)



je sui s sur Mandriva 2006
merci de bien vouloir m'aider

1 réponse

Bonjour

Déjà il faut utiliser l'opérateur "list" pour créer des listes : (list 'a 'b 'c 'd).
Ecrire '(a b c d) ne fonctionne que pour des listes constantes, il ne faut pas le faire pour des listes qui peuvent être modifiées. L'interpréteur Lisp risque de l'accepter, mais ton programme va faire n'importe quoi et tu vas perdre beaucoup de temps à comprendre pourquoi.

Je ne me souviens pas bien des fonctions sur les listes, mais regarde append et nconc.
Ah, si ton but est d'avoir une fonction qui fait ce que tu décris et non de programmer cette fonction, je crois qu'il existe une fonction rotate ou nrotate (ou alors shift, ou un truc comme ça).

Syll
0