Aller au contenu

Manipulations de listes et de conditions


Messages recommandés

Posté(e)

Bonjour,

Je me suis remis au LISP et j'ai un souci dans une sous-routine de vérification de mot pour faire sortir son appartenance à une catégorie : voici le début de ma sous-routine :

(defun verification_mot (mot_a_verifier /)
(setq LISTE_PRENOMS (list "Adam" "Adolphe" "Adrien" "Alain" "Albert" "Alexandre" ...)
(setq LISTE_TYPE (list "Allée" "Avenue" "Bosquets" "Boulevard" "Canal" "Carre" "Carrefour" ...)
(setq LISTE_ARTICLE (list "d'" "de" "de" "de" "l'" "de" "la" "des" "du" "l'" "la"))
(setq LISTE_TITRE (list "Abbé" "Amiral" "Capitaine" "Cardinal" "Chanoine" "Colonel" "Commandant" ...)
(setq LISTE_PARTICULE (list "D'" "De" "De" "L'" "De" "La" "Des" "Du" "L'" "La" "Le"))
(setq LISTE_TEXTE "et")

[i] catégorie à retourner dans la fonction "Maitre"[/i] 

);fin defun verification_mot

 

- Comment faire pour que le texte à vérifier soit comparé aux éléments de chaque liste et retourne une catégorie si l'existence est vérifiée ?

si mot_a_verifier fait partie de la liste des prénoms alors catégorie = prenom

si mot_a_verifier fait partie de la liste des Types de voies alors catégorie = type_voie

si mot_a_verifier fait partie de la liste des Articles alors catégorie = article

si mot_a_verifier fait partie de la liste des Titres alors catégorie = titre

si mot_a_verifier fait partie de la liste des Particules alors catégorie = particule

si mot_a_verifier fait partie de la liste des Textes alors catégorie = texte

si mot_a_verifier ne fait partie d'aucune des listes alors catégorie = non_defini

 

Merci pour vos réponses,

Fabcad,[Edité le 17/9/2009 par fabcad]

Posté(e)

Salut,

 

Regarde les fonctions member ou vl-position

 

(cond
 ((member mot_a_verifier LISTE_PRENOMS) (setq categorie "prenom"))
 ((member mot_a_verifier LISTE_TYPE) (setq categorie "type_voie"))
 ;; etc.
)

 

ou

 

(cond
 ((vl-position mot_a_verifier LISTE_PRENOMS) (setq categorie "prenom"))
 ((vl-position mot_a_verifier LISTE_TYPE) (setq categorie "type_voie"))
 ;; etc.
)

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Merci Gile ca fonctionne,

Juste pour :

si mot_a_verifier ne fait partie d'aucune des listes alors catégorie = non_defini

comment faire l'otherwise ?

(cond
((vl-position mot_a_verifier LISTE_PRENOMS) (setq categorie "prenom"));fin member dans LISTE_PRENOMS
((vl-position mot_a_verifier LISTE_TYPE) (setq categorie "type_voie"));fin member dans LISTE_TYPE
((vl-position mot_a_verifier LISTE_ARTICLE) (setq categorie "article"));fin member dans LISTE_ARTICLE
((vl-position mot_a_verifier LISTE_TITRE) (setq categorie "titre"));fin member dans LISTE_TITRE
((vl-position mot_a_verifier LISTE_PARTICULE) (setq categorie "particule"));fin member dans LISTE_PARTICULE
((vl-position mot_a_verifier LISTE_TEXTE) (setq categorie "texte"));fin member dans LISTE_TEXTE
"Otherwise"
);fin cond
(alert categorie)
);fin defun verification_mot

Posté(e)

Tu peux faire une dernière condition avec T (true : toujours vrai) ou si tu as déclaré localement la variable mot_a_verifier elle restera à nil après le cond et tu testes ensuite si elle est nil ou non.

 

(defun verification_mot (mot_a_verifier / categorie)
 (cond
((vl-position mot_a_verifier LISTE_PRENOMS) (setq categorie "prenom"));fin member dans LISTE_PRENOMS
((vl-position mot_a_verifier LISTE_TYPE) (setq categorie "type_voie"));fin member dans LISTE_TYPE
((vl-position mot_a_verifier LISTE_ARTICLE) (setq categorie "article"));fin member dans LISTE_ARTICLE
((vl-position mot_a_verifier LISTE_TITRE) (setq categorie "titre"));fin member dans LISTE_TITRE
((vl-position mot_a_verifier LISTE_PARTICULE) (setq categorie "particule"));fin member dans LISTE_PARTICULE
((vl-position mot_a_verifier LISTE_TEXTE) (setq categorie "texte"));fin member dans LISTE_TEXTE
(T (setq categorie "Aucune"))
 );fin cond
(alert categorie)
);fin defun verification_mot

 

ou

 

(defun verification_mot (mot_a_verifier / categorie)
 (cond
((vl-position mot_a_verifier LISTE_PRENOMS) (setq categorie "prenom"));fin member dans LISTE_PRENOMS
((vl-position mot_a_verifier LISTE_TYPE) (setq categorie "type_voie"));fin member dans LISTE_TYPE
((vl-position mot_a_verifier LISTE_ARTICLE) (setq categorie "article"));fin member dans LISTE_ARTICLE
((vl-position mot_a_verifier LISTE_TITRE) (setq categorie "titre"));fin member dans LISTE_TITRE
((vl-position mot_a_verifier LISTE_PARTICULE) (setq categorie "particule"));fin member dans LISTE_PARTICULE
((vl-position mot_a_verifier LISTE_TEXTE) (setq categorie "texte"));fin member dans LISTE_TEXTE
 );fin cond
 (if categorie 
   (alert categorie)
   (alert "Aucune catégorie")
 ); fin de if
);fin defun verification_mot

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

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é