2012-02-26 5 views
4

私はSteeleのCommon Lisp the Languageを見てきました。私は顔が青く、まだこの質問があります。私がコンパイルした場合:(label-variety)関数を無視するようにLispコンパイラに依頼するにはどうすればよいですか?

(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を無視するようにコンパイラにどのように依頼しますか?私はこの試みた:

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

をし、それが働いた:

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

'#+ ignore'は読者が次のフォーム全体をスキップできるようにします(' * features * 'に' ignore'がない限り) 。 – Svante

+0

エドザッカリー。それが私の悪い計画だった。しかし、以下の答えで概説された良い計画が勝利を収めました。 :) –

+0

CLtlとCLtl2はどちらも旧式の本であり、リファレンスや学習資料として使うのではなく、lispの歴史に興味のある人にのみおすすめします。現代のANSI共通のlispの読書については、Peter SeibelのPractical Common LispとConrad BarskiのLispのLandの両方をお勧めします。 –

答えて

8

GNU CLISPはdeclareの機能をignoredに依頼しています。また

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

(これはそれがyが実際に使用されているかどうかをユーザーに依存マクロ展開の結果である場合は特に)、

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

(あなたが(function y)を書くことが予想される場合はいつでも、 )代わりに#'yを自由に使用することができます)。

+0

あなたが言ったことはすべて、あなたが言った通りに正確に働きます。ありがとう! –

関連する問題