4 votes

Comment demander au compilateur Lisp d'ignorer une fonction (label-variety) ?

J'ai fixé Common Lisp the Language de Steele jusqu'à en devenir bleu, et j'ai encore cette question. Si je compile :

(defun x ()
  (labels ((y ()))
    5))
(princ (x))
(terpri)

ceci se produit :

home:~/clisp/experiments$ clisp -c -q x.lisp
;; Compiling file /u/home/clisp/experiments/x.lisp ...
WARNING in lines 1..3 :
function X-Y is not used.
Misspelled or missing IGNORE declaration?
;; Wrote file /u/home/clisp/experiments/x.fas
0 errors, 1 warning
home:~/clisp/experiments$ 

C'est juste. Alors comment demander au compilateur d'ignorer la fonction y ? J'ai essayé ceci :

(defun x ()
  (labels (#+ignore(y ()))
    5))
(princ (x))
(terpri)

et ça a fonctionné :

home:~/clisp/experiments$ clisp -c -q y.lisp
;; Compiling file /u/home/clisp/experiments/y.lisp ...
;; Wrote file /u/home/clisp/experiments/y.fas
0 errors, 0 warnings
home:~/clisp/experiments$ 

mais je ne pense pas que c'est ce que suggère l'avertissement de faire.

Que dois-je faire ?

9voto

Matthias Benkard Points 11264

GNU CLISP vous demande de déclarer la fonction à ignorer.

(defun x ()
  (labels ((y ()))
    (declare (ignore (function y)))
    5))

Alternativement (surtout si cela est le résultat d'une expansion de macro où il dépend de l'utilisateur si y est réellement utilisé ou non),

(defun x ()
  (labels ((y ()))
    (declare (ignorable (function y)))
    5))

(Partout où vous êtes censé écrire (function y), vous êtes libre d'utiliser l'abréviation du lecteur #'y à la place.)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X