Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

elisp, compilation et messages d'erreur

4 réponses
Avatar
Nicolas Matringe
Bonsoir
J'essaie de bricoler un peu en elisp mais je n'arrive pas à déclarer
proprement mes variables locales.

Voilà à quoi mon code ressemble :

(defun qdp-asm-compile ()
"blablabla"
(interactive)
(let ((asm-file-name (buffer-file-name))
(bin-file-name (concat (file-name-sans-extension
(buffer-file-name)) ".bin"))
(asm-file-content (buffer-substring (point-min) (point-max)))))
)

Et déjà rien qu'avec ça j'ai des soucis.
Quand je fais un "byte compile" pour voir si ça marche j'ai pas mal de
messages que je ne comprends pas (où peut-on trouver de l'aide là dessus ?)
** `(buffer-file-name)' called for effect
** `(concat (file-name-sans-extension (buffer-file-name)) ".bin")'
called for effect
** `(buffer-substring (point-min) (point-max))' called for effect


Si par contre je déclare juste les variables puis que je leur affecte
des valeurs avec setq là ça marche.

Enfin au moins en posant mes questions ai-je trouvé quelques réponses.

Merci de votre aide
Nico

4 réponses

Avatar
Matthieu Moy
Nicolas Matringe writes:

Bonsoir
J'essaie de bricoler un peu en elisp mais je n'arrive pas à déclarer
proprement mes variables locales.

Voilà à quoi mon code ressemble :

(defun qdp-asm-compile ()
"blablabla"
(interactive)
(let ((asm-file-name (buffer-file-name))
(bin-file-name (concat (file-name-sans-extension
(buffer-file-name)) ".bin"))
(asm-file-content (buffer-substring (point-min) (point-max)))))
)

Et déjà rien qu'avec ça j'ai des soucis.
Quand je fais un "byte compile" pour voir si ça marche



Avant ça, tu peux aussi faire un C-x C-e derrière la parenthèse
fermante, voire un C-M-x dans le (defun ...), pour évaluer le morceau
de lisp en live.

j'ai pas mal de messages que je ne comprends pas (où peut-on trouver
de l'aide là dessus ?) ** `(buffer-file-name)' called for effect **
`(concat (file-name-sans-extension (buffer-file-name)) ".bin")'
called for effect ** `(buffer-substring (point-min) (point-max))'
called for effect



Tu appelles des fonctions qui n'ont pas d'effet de bord, et tu
n'utilises pas leur résultat. Le compilateur te préviens que ça ne
sert à rien.

--
Matthieu
Avatar
Nicolas Matringe
Matthieu Moy a écrit :
Nicolas Matringe writes:



[...]
Quand je fais un "byte compile" pour voir si ça marche



Avant ça, tu peux aussi faire un C-x C-e derrière la parenthèse
fermante, voire un C-M-x dans le (defun ...), pour évaluer le morceau
de lisp en live.



Ah c'est bien, ça...


Tu appelles des fonctions qui n'ont pas d'effet de bord, et tu
n'utilises pas leur résultat. Le compilateur te préviens que ça ne
sert à rien.



Certes, je n'en fais encore rien (mais forcément, il peut pas savoir que
j'ai l'intention d'en faire quelque chose plus tard)
Ca existe un glossaire des messages d'erreur, quelque part ? J'ai rien
trouvé.

Nico
Avatar
Vincent Belaïche
Lorsque tu fais un `let' la portée des variables que tu définis
est limitée à l'intérieur du let. Donc si tes variables ne sont pas
utilisées dans le corps du let, le compilateur sait qu'elles ne sont pas
utilisée du tout.

A+
Vincent.

Nicolas Matringe a écrit :
Matthieu Moy a écrit :
Nicolas Matringe writes:



[...]
Quand je fais un "byte compile" pour voir si ça marche



Avant ça, tu peux aussi faire un C-x C-e derrière la parenthèse
fermante, voire un C-M-x dans le (defun ...), pour évaluer le morceau
de lisp en live.



Ah c'est bien, ça...


Tu appelles des fonctions qui n'ont pas d'effet de bord, et tu
n'utilises pas leur résultat. Le compilateur te préviens que ça ne
sert à rien.



Certes, je n'en fais encore rien (mais forcément, il peut pas savoir que
j'ai l'intention d'en faire quelque chose plus tard)
Ca existe un glossaire des messages d'erreur, quelque part ? J'ai rien
trouvé.

Nico
Avatar
Nicolas Matringe
Vincent Belaïche a écrit :

Lorsque tu fais un `let' la portée des variables que tu définis
est limitée à l'intérieur du let. Donc si tes variables ne sont pas
utilisées dans le corps du let, le compilateur sait qu'elles ne sont pas
utilisée du tout.




J'avais bien compris la portée du let, c'est juste le message d'erreur
qui me semblait abscons.

Nicolas