fabcad Posté(e) le 5 mars 2010 Posté(e) le 5 mars 2010 Bonjour, Tout est dans le titre de ce post, c'est la première fois que j'essaie de combiner un cond avec un and et je n'arrive pas, voici le code :C'est dans la deuxième condition ou je voudrais que si les réponses sont True alors afire l'affectation des valeurs dans les champs de tables de données d'Objet.Merci pour vos lumières, ((= nombre_mots 1) (progn (setq categorie_mot_un (verification_mot (nth 0 liste_mots))) (cond ((= categorie_mot_un "TYPE_VOIE") (progn (setq type_voie (verif_type_voie (nth 0 liste_mots))) ; fin setq decoupage (ade_odsetfield obj_acad nom_de_la_table cible-ch1 recnum type_voie) (ade_odsetfield obj_acad nom_de_la_table cible-ch8 recnum type_voie) (ade_odsetfield obj_acad nom_de_la_table cible-ch9 recnum type_voie) (ade_odsetfield obj_acad nom_de_la_table cible-ch11 recnum (substr (getvar "DWGNAME") 1 5) ) (vla-put-color obj_vl acBylayer) ) ;_ fin progn ) ;_ fin cond categorie_mot_un est égal à TYPE_VOIE ((and (= (substr (nth 0 liste_mots) 1 1) "D") (= (numberp (atoi (substr (nth 0 liste_mots) 2 1)) T)) ) ;_ fin and (progn (setq type_voie "Départementale") ;_ fin setq decoupage (setq mot_en_cours (nth 0 liste_mots)) (ade_odsetfield obj_acad nom_de_la_table cible-ch1 recnum type_voie) (ade_odsetfield obj_acad nom_de_la_table cible-ch8 recnum mot_en_cours) (ade_odsetfield obj_acad nom_de_la_table cible-ch9 recnum mot_en_cours) (ade_odsetfield obj_acad nom_de_la_table cible-ch11 recnum (substr (getvar "DWGNAME") 1 5) ) (vla-put-color obj_vl acBylayer) ) ;_ fin progn ) ;_fin si le mot correspond à D# ) ;_ fin cond ) ;_ fin progn ) ;_ fin condition si nombre_mots = 1
Patrick_35 Posté(e) le 5 mars 2010 Posté(e) le 5 mars 2010 Salut Je ne vois pas :o La 2em condition me parait bonne. tu as juste un progn qui est inutile @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
(gile) Posté(e) le 5 mars 2010 Posté(e) le 5 mars 2010 Je ne vois pas d'erreur avec cond ou and non plus, mais un petit soucis dans la deuxième condition : Débroussaillons un peu. (= (numberp (atoi (substr (nth 0 liste_mots) 2 1)) T))je suppose que tu voulais écrire : (= (numberp (atoi (substr (nth 0 liste_mots) 2 1))) T)Il est inutile d'évaluer avec = si l'expression (numberp ...) est égale à T pour avoir un résultat T ou nil que nous donne directement numberp. on peut donc simplifier (numberp (atoi (substr (nth 0 liste_mots) 2 1)))Cette expression retournera toujours T parce que atoi retourne toujours un nombre :(atoi "N") retourne 0 Il vaudrait mieux utiliser distof qui retourne le nombre ou nil. Comme les prédicats en LISP ne sont pas obligé de retourner T (toute valeur non nil est considérée comme vraie) on peut l'utiliser directement (sans utiliser numberp)Ce qui donnearit pour la double condition : (and (= (substr (nth 0 liste_mots) 1 1) "D") (distof (substr (nth 0 liste_mots) 2 1)) ) Comme dit Patrick_35, les (progn ...) sont inutiles avec cond qui accepte plusieurs expressions. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
fabcad Posté(e) le 5 mars 2010 Auteur Posté(e) le 5 mars 2010 Une stupide parenthèse manquante pour l'égalité du numberp.Merci encore,Je prends note de vos remarques,Bon week-end. [Edité le 5/3/2010 par fabcad]
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant