VDH-Bruno Posté(e) le 6 mars 2012 Posté(e) le 6 mars 2012 Bonjour, Me livrant à quelques exercices de styles, que je résumerai à ces quelques lignes:_$ (setq f or) #<SUBR @09a5ea3c OR> _$ (f T T) ; erreur: Impossible d'appliquer la feuille spéciale: OROu plus exactement à ces dernières_$ (defun test (f a B) (f a B)) TEST _$ (test or t t) ; erreur: Impossible d'appliquer la feuille spéciale: OR Alors qu’en lisp ce sont des opérations basique pourquoi cette limitation avec or (idem avec and et certainement avec d’autres fonctions..), personnellement je sèche, à tous hasard connaîtriez-vous le pourquoi du comment de ceci? A+ Apprendre => Prendre => Rendre
Tramber Posté(e) le 6 mars 2012 Posté(e) le 6 mars 2012 Et pourtant (eq f or) renvoie T ! Tout ce que je sais c'est que f devient une SUBR (type f) et je sais aussi que l'on est pas autorisé à ré-affecter une fonction à un terme autolisp. Pourquoi on ne peut affecter une définition de routine propriétaire à une variable, je l'ignore..... Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
VDH-Bruno Posté(e) le 6 mars 2012 Auteur Posté(e) le 6 mars 2012 (modifié) BonjourPourquoi on ne peut affecter une définition de routine propriétaire à une variable, je l'ignore.....Si Tramber en Lisp cela ce fait trés bien, ou j’ai peut-être pas tout compris à ta réponse, mais en reprenant mes exemples précédents les résultats suivant sont tout à fait cohérent contrairement à ceux de mon premier message._$ (test + 1 2) 3 Ou_$ (setq f eq) #<SUBR @09a1c488 EQ> _$ (f "a" "a") T A+ ------------ EDIT ------------En fait c’est une coquetterie qui m’a amener à affecter un symbole représentant un appel enveloppant de la fonction or, en fait je cherchais une fonction qui renvoyait nil lorsque son argument était nil et la fonction or me semblait un bon candidat :_$ (or nil) nil Je pensais ainsi gérer élégamment le retour d’appel de certaines fonctions récursives en modifiant la valeur de la fonction enveloppante (pour les cas ou la valeur de retour valait nil) et éviter ainsi un accumulateur ou un if... Modifié le 6 mars 2012 par VDH-Bruno Apprendre => Prendre => Rendre
Tramber Posté(e) le 6 mars 2012 Posté(e) le 6 mars 2012 J'ai compris. Le récursif de la mort .... le Graal ! ...la feuille spéciale: OR C'est alors parce qu'elle est spéciale cette feuille qu'elle ne peut être ré-affectée. Et comme elle est en or, tu peux t'en servir mais pas autrement que comme cela : http://www.delafee-decor.com/images/delafee/noris_engel.JPG Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
VDH-Bruno Posté(e) le 6 mars 2012 Auteur Posté(e) le 6 mars 2012 Re,Une explication qui en vaut une autre, un peu plus difficile à transposer avec la fonction and.. ;) A+ Apprendre => Prendre => Rendre
Carboleum Posté(e) le 6 mars 2012 Posté(e) le 6 mars 2012 Je crois que la différence est que or (et and) s'apparente plus à if qu'à une fonction telle que +.En effet, or va évaluer le 2ème argument si le premier renvoie nil. if, and, or, progn ne sont pas tout à fait des fonctions puisque tous les arguments ne seront pas forcément évalués.La différence réside sans doute là. Carboléüm, qui dessine aussi à la main -> Carboleum's sketchblog
VDH-Bruno Posté(e) le 6 mars 2012 Auteur Posté(e) le 6 mars 2012 Bonsoir Carboleum, C’est une piste de réflexion (de toute façon j’ai pas mieux dans ma besace), à l’occasion j’essayerai de réinstaller un dialecte Lisp sur mon poste histoire de m’assurer que ce n’est pas une limitation propre d’AutoLisp ou peut être en postant sur d’autre forum Lisp à voir…Et si j’ai un peu plus de temps j’essayerai également de lister (tester) d’éventuelles autres fonctions au comportement similaire (histoire de faire le tour de la question). A+ et merci Apprendre => Prendre => Rendre
VDH-Bruno Posté(e) le 7 mars 2012 Auteur Posté(e) le 7 mars 2012 Bonjour, Après quelques recherches nocturne (le petit dernier fait ses dents ça aide pour rester éveiller la nuit), je pense avoir trouvé un début de réponse du pourquoi comment. En fait les fonctions Lisp peuvent se classer en plusieurs familles celles que nous définissons au moyen de defun du type USUBR et celle qui sont prédéfinit du type SUBR, pour cette dernière catégorie on peut la subdiviser de façon simplifier en 2 grandes familles : Les fonctions usuelles comme les fonctions prédicats, les opérateurs mathématiques, les fonctions de manipulation de listes, en gros toutes "les fonctions de bibliothèques" qui pourrait très bien être définie en Lisp.(ex : + member - nth eq …) Puis les fonctions primitives (en gros ce qui ne peut être écrit en Lisp) tel que les fonctions d’évaluations et les structure de contrôle (on retrouve la notion introduite précédemment par Carboleum) comme progn, quote, defun, if.. .Fonctions que l’on retrouve sous la syntaxe <forme-speciale> dans la littérature (exception faite pour eval ???).Aux <forme-speciale> on peut également leurs joindre des constructions usuelles non primitives (qui peuvent être définie en Lisp mais pas en AutoLisp) des structures du type <forme-macro> comme and, or, cond… Visiblement c’est la deuxième catégorie de fonctions qui font l’objet de la limite :; erreur: Impossible d'appliquer la feuille spéciale: Voilà en gros le résumé que je peux faire en l’état de mes connaissances,A+ Apprendre => Prendre => Rendre
Carboleum Posté(e) le 7 mars 2012 Posté(e) le 7 mars 2012 Visiblement c’est la deuxième catégorie de fonctions qui font l’objet de la limite :; erreur: Impossible d'appliquer la feuille spéciale: Oui, et à ce propos, il semble que "feuille" soit une erreur de traduction:Mon autocad engliche me dit ; error: cannot apply special form: PROGNIl eut été mieux de le traduire par ; erreur: Impossible d'appliquer la forme spéciale: Du coup, ça se tient ;-) Merci pour la recherche nocturne.J'étais aussi tenté de parler des macros (lisp) mais j'étais pas sûr d'être dans le bon. Carboléüm, qui dessine aussi à la main -> Carboleum's sketchblog
VDH-Bruno Posté(e) le 7 mars 2012 Auteur Posté(e) le 7 mars 2012 Il eut été mieux de le traduire par ; erreur: Impossible d'appliquer la forme spéciale:Oui en effet c’eut été mieux, et du même coup m’aurait agréablement simplifié les recherches, merci pour le complément d’information.A+ Apprendre => Prendre => Rendre
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