Как мне попросить компилятор Lisp игнорировать функцию (label-разнообразие)? - PullRequest
4 голосов
/ 27 февраля 2012

Я смотрел на Common Lisp the Language Стила до тех пор, пока у меня не посинело лицо, и у меня все еще остается этот вопрос. Если я скомпилирую:

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

это происходит:

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$ 

Достаточно справедливо. Так как же попросить компилятор игнорировать функцию y? Я попробовал это:

* * 1010

и это сработало:

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$ 

но почему-то я не думаю, что это то, о чем говорит предупреждение.

Что мне делать?

1 Ответ

8 голосов
/ 27 февраля 2012

GNU CLISP просит вас declare, чтобы эта функция была ignore d .

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

В качестве альтернативы (особенно если это результатрасширения макроса, где от пользователя зависит, используется ли y на самом деле или нет),

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

(Где бы вы ни писали (function y), вы можете использовать сокращение для читателя #'y вместо.)

...