Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I ask the Lisp compiler to ignore a (label-variety) function?

I've stared at Steele's Common Lisp the Language until I'm blue in the face, and still have this question. If I compile:

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

this happens:

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$ 

Fair enough. So how do I ask the compiler to ignore function y? I tried this:

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

and it worked:

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$ 

but somehow I don't think that's what the warning is suggesting that I do.

What do I do?

like image 756
Bill Evans at Mariposa Avatar asked Jan 17 '23 09:01

Bill Evans at Mariposa


1 Answers

GNU CLISP is asking you to declare the function to be ignored.

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

Alternatively (especially if this is the result of a macro expansion where it depends on the user whether y is actually used or not),

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

(Wherever you are expected to write (function y), you are free to use the reader abbreviation #'y instead.)

like image 127
Matthias Benkard Avatar answered Jan 30 '23 23:01

Matthias Benkard