Aller au contenu

Différence Cons et Lisp


LUDWIG

Messages recommandés

Bonjour à tous,

 

Me revoilà avec mes questions après une longue absence du forum...

 

Je profite d'une période creuse :cool: pour enseigner les rudiments (enfin, les rudiments que je connais !) de Lisp à mes collègues :( .

 

Et là, je ne sais pas trop comment expliquer la différence entre l'utilsation de CONS et de LIST, d'autant plus que ce n'est pas très clair dans ma tête :casstet: . J'ai regardé dans l'aide et dans AIDACAD, ça ne m'a pas vraiment éclairé. Je me souviens d'un sujet ou cette différence avait été abordée, mais je ne l'ai pas retrouvé.

 

En fait, c'est en leur commentant un code que je suis tombé sur ce point :

 

 (setq jeu (ssget "X" ( [b] list [/b]( [b] cons [/b]0 "INSERT")( [b] cons [/b]410 n))))

 

Je comprends tout à fait la ligne (sélection des références de blocs dans la présentation n (dans une boucle foreach, n vaut d'abord "Model", puis "Présentation 1" etc).

 

Quelqu'un saurait-il me faire comprendre ? Merci d'avance ! :heartpump: :present:

Autocad 2021 - Revit 2022 - Windows 10

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Je vais essayer d'être clair :

 

(list) regroupe un nombre queconque d'expressions dans une liste, (cons) ajoute un élément au début d'une liste ou construit un élément de liste associative (c'est le cas dans l'exemple que tu donnes) :

 

(cons 0 "INSERT")
renvoie (0 . "INSERT")

 

(cons 410 n)
évalue les arguments (n) et renvoie (410 . "model")

 

et

( list (cons 0 "INSERT") (cons 410 n))
renvoie la liste constituée de ces deux éléments : ((0 . "INSERT") (410 . n))

 

Pour résumer, utilisé avec une liste comme second argument (cons) ajoute le premier argument en début de liste :

(cons 'A '(B C D)) 

renvoie (A B C D)

 

utilisé avec un élément (atom) comme second argument (con)s renvoie une paire :

(cons 'A 'B) 

renvoie (A . B)

 

[Edité le 31/8/2005 par gile]

Lien vers le commentaire
Partager sur d’autres sites

List te permet d'accéder de facon séquentielle à des données

 

(setq liste (list 28.0 5.2 7.1))

(nth 0 liste) donne 28.0

mais (assoc 28.0 liste) provoque une erreur

Nota: (cdr liste) te donnera comme résultat une liste

 

cons te permet d'accéder directement aux données sans avoir besoin de chercher ta référence ni de connaitre l'ordre des éléments (dotted pair)

(setq liste (list (cons "Longueur" 28.0) (cons "Hauteur" 5.2) (cons "Profondeur" 7.1)))

(nth 0 liste) donne ("Longueur" . 28.0)

(assoc "Hauteur" liste) donne ("Hauteur" 5.2)

(cdr (assoc "Hauteur" liste)) donne 5.2 (qui n'est pas une liste mais un réel)

 

bon courage ;)

 

Dessinateur AutoCAD, Modeleur BIM, consultant informatique logiciels métier

Lenovo ThinkStation P330 i9 9900K 32Gb RAM 512 SSD + 1To

AutoCAD, Revit, GstarCAD, Fisa-CAD, Microsoft Office

 

PlaquetteDeplianteMars2024.pdf

Lien vers le commentaire
Partager sur d’autres sites

voila un extrait de mon support de cours LISP Base... les Fonctions LIST et CONS...

 

 

si ça t'intéresses tu peux trouver le support LISP 1 et 2 ici... via ALLOPASS...

 

 

Christian

 

[Edité le 31/8/2005 par rebcao]

Formateur, Consultant Expert AutoCAD, REVIT MEP, INVENTOR, télécharger , des Outils AutoCAD...

cad123 @ wanadoo.fr (enlever les espaces de part et d'autre de @)

Lien vers le commentaire
Partager sur d’autres sites

Puisqu'on est dans le thème des manipulations de listes,

 

Autre que les fonctions de base CONS et LIST, il y a aussi APPEND qui permet de concatener 2 listes en 1.

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Lien vers le commentaire
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité