Limiter la porté d'une variable en emacs lisp - Langages fonctionnels - Programmation
Marsh Posté le 02-07-2011 à 14:06:40
leonhard a écrit : Bonjour
|
Il me semble que c'est local, sauf si elles existent déjà dans la scope globale (via un setq global). Tu peux tester en exécutant ta fonction et en regardant si mois est visible dans le scope global.
leonhard a écrit : Dans la doc de emacs lisp, l'opérateur "let" est mentionné à la place de setq, mais je n'ai pas réussi à l'utiliser. |
let est une forme plus fonctionnelle (setq est une forme très impérative puisque modifiant l'environnement d'exécution).
Let a la forme (let (definitions) body). La partie definitions correspond à ce que tu fais avec setq: ça assigne des valeurs à des noms, mais ces noms ne sont visibles que depuis body, pas en dehors. Ça permet donc de rester bien scopé.
Il faut également noter qu'il y a 2 formes pour let: let et let*. La différence est visible quand on définit plusieurs variables en même temps, avec let* une définition de variable peut utiliser les variables définies avant elle (les définitions sont exécutées l'une après l'autre), avec let elle ne peut pas.
Avec let, ton code devrait ressembler à ça:
Code :
|
accessoirement, normalement les globales sont définies avec defvar et defconst
edit: accessoirement, tu pourrais déplacer ce topic dans la sous-cat langages fonctionnels
Marsh Posté le 02-07-2011 à 14:43:35
el muchacho a écrit : Raison de non distribution: |
MuchachoG
Marsh Posté le 02-07-2011 à 15:01:53
masklinn a écrit : |
masklinn a écrit :
|
Merci de ta réponse.
Si tu le permets j'ai encore 2 questions (ou même trois).
1) Je ne connais rien à la programmation fonctionnelle. Donc ce j'ai montré ici c'était la première version de mon programme. Entre-temps, j'ai pensé qu'on pouvoir se passer de ces variables en utilisant les propriétés des listes:
Code :
|
Est-ce que d'un point de vue "fonctionnel" c'est meilleur comme version ? et d'un point de vue lisp ?
2) Pourquoi ton code apparaît plus beau que le mien dans les messages
3) Comment on fait pour déplacer un sujet existant ? J'avais mis la section "divers" parce que j'étais pas vraiment sur que mes bricolages sont vraiment de la programmation fonctionnelle.
D'avance merci de ton (enfin de votre) aide
Marsh Posté le 02-07-2011 à 15:10:08
leonhard a écrit :
Si tu le permets j'ai encore 2 questions (ou même trois). 1) Je ne connais rien à la programmation fonctionnelle. Donc ce j'ai montré ici c'était la première version de mon programme. Entre-temps, j'ai pensé qu'on pouvoir se passer de ces variables en utilisant les propriétés des listes:
Est-ce que d'un point de vue "fonctionnel" c'est meilleur comme version ? |
Que ta version d'origine? Oui. Après ça va parce que le code n'est pas trop complexe, s'il le devient utiliser let et let* reste une bonne idée
leonhard a écrit : et d'un point de vue lisp ? |
D'un point de vue lips, ton formattage est tout fucké, tu formattes comme si c'était du C
Exemples:
Code :
|
(et les arguments devraient être alignés dans tes appels de fonctions, quand ils sont sur des lignes différentes)
leonhard a écrit : 2) Pourquoi ton code apparaît plus beau que le mien dans les messages |
Le forum supporte une balise code en plus de la balise cpp. Elle utilise GeSHI pour parser et coloriser le code, donc il faut lui donner le langage utilisé (j'ai tapé code=lisp).
leonhard a écrit : 3) Comment on fait pour déplacer un sujet existant ? J'avais mis la section "divers" parce que j'étais pas vraiment sur que mes bricolages sont vraiment de la programmation fonctionnelle. |
La sous cat est langages fonctionnels
Il te suffit d'éditer ton premier post, tu dois pouvoir changer la sous-catégorie depuis là
Marsh Posté le 02-07-2011 à 18:46:58
masklinn a écrit : |
ok, je note, merci !
masklinn a écrit :
|
ok, merci, ça aussi je note. J'ai appris quelques rudiments de lisp il y a plus de 20 ans. A l'époque l'éditeur qu'on utilisait (VMS EDT pour les vieux qui connaissent) n'avait pas de fonction pour montrer les parenthèses correspondantes. J'avais donc pris ce genre d'habitude et comme depuis j'ai principalement utilisé des langages "c-like" j'ai pas percuté Mais il n'est jamais trop tard pour prendre des bonnes habitudes.
masklinn a écrit : |
Décidément ce soir je me coucherai moins con .. bon faut dire que je pars de loin
masklinn a écrit : |
ça c'est fait
Merci infiniment de ton aide
Marsh Posté le 02-07-2011 à 09:42:57
Bonjour
en bricolant la fonction suivante:
Je me suis demandé quelle était la porte des variables "mois", "annee" et "note-file" de cette fonction. Il semble qu'il soit possible de les accéder aussi en dehors de la fonction, alors comment faire pour qu'elles n'interfèrent pas avec d'autres variables de même nom définies dans d'autres fonctions ?
Dans la doc de emacs lisp, l'opérateur "let" est mentionné à la place de setq, mais je n'ai pas réussi à l'utiliser.
D'avance merci de votre aide
Message édité par leonhard le 02-07-2011 à 18:40:50