Aller au contenu

Messages recommandés

Posté(e)

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: OR

Ou 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

Posté(e)

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

 

./__\.
(.°=°.)
Posté(e) (modifié)

Bonjour

Pourquoi 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é par VDH-Bruno

Apprendre => Prendre => Rendre

Posté(e)

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

 

./__\.
(.°=°.)
Posté(e)

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

Posté(e)

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

Posté(e)

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

Posté(e)

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: PROGN

Il 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

Posté(e)
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

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é