Aller au contenu

Messages recommandés

Posté(e)

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

 

Posté(e)

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

Posté(e)

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]

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é