Aller au contenu

Alternatives à vlisp / récursivité


Messages recommandés

Posté(e)

Avant de découvrir qu'elles exitaient en vlisp, j'ai trouvé certaines fonction équivalentes dans la FAQ Autolisp de Reini Urban (CF le site @CAD+, je ne sais pas faire de lien) et pour essayer de comprendre ce qu'est la récursivité, j'en ai commis moi même quelques que je livre ici si çà peut intéressser des utilisateurs qui n'ont pas accés à vlisp (intellicad ,...)

 

Les deux premières sont définies de deux façons : itérative et récursive.

Les deux dernières sont piquées à la FAQ AutoLISP et nécessaire aux précédentes.

 

 

;;; Évalue si au moins un des membres d'une liste retourne T comme résultat à l'exécution d'une fonction

;;; (SOME 'minusp '(10 20 -50)) -> T

;;; En vlisp -> vl-some

;;;

;;; Façon itérative :

 

(defun SOME (fun lst)

(and (consp lst)

(member T (mapcar fun lst))

)

)

 

;;; Ou façon récursive :

 

(defun SOME (fun lst)

(cond

((null lst) nil)

((apply fun (list (car lst))) T)

(T (SOME fun (cdr lst)))

)

)

 

;;; Vérifie si tous les membres d'une liste retournent T comme résultat à l'exécution d'une fonction

;;; (EVERY numberp '(10 5.5 0)) -> T

;;; En vlisp -> vl-every

;;;

;;; Façon itérative :

 

(defun EVERY (fun lst)

(and

(consp lst)

(apply '= (cons T (mapcar fun lst)))

)

)

 

;;; Façon récursive :

 

(defun EVERY (fun lst)

(cond ((null lst) nil)

((null (cdr lst)) (apply fun (list (car lst))))

((apply fun (list (car lst))) (EVERY fun (cdr lst)))

)

)

 

;;; REMOVE_DOUBLES - Suprime tous les doublons d'une liste

 

(defun REMOVE_DOUBLES (lst)

(cond

((atom lst) lst)

(T

(cons (car lst) (REMOVE_DOUBLES (remove (car lst) lst)))

)

)

)

 

;;; une liste non vide ?

;;; En vlisp -> vl-consp

 

(defun consp (x)

(and x (listp x))

)

 

;;; Enlève un article d'une liste (les éléments en doubles sont permis)

;;; (remove 0 '(0 1 2 3 0)) -> (1 2 3)

;;; En vlisp -> vl-remove

 

(defun remove (ele lst)

(apply 'append (subst nil (list ele) (mapcar 'list lst)))

)

 

  • 2 semaines après...
Posté(e)

Voici le lien vers la FAQ AutoLISP de reini Urban (traduite en français).

 

J'y ai trouvé énormément de chose qui m'ont permis d'apprendre ce que je connais en LISP aujoud'hui.

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é