2012-02-26 3 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'가 없으면), 당신은 자유롭게 독자 번호 #'y을 사용할 수 있습니다. . – Svante

+0

에드 자카리. 그것은 나의 사악한 계획이었다. 그러나 아래의 답변에 요약 된 좋은 계획이 우세했습니다. :) –

+0

CLtl과 CLtl2는 둘 다 오래된 책이며 참조 또는 학습 자료로 사용되기보다는 isp 역사에 관심이있는 사람들에게만 추천합니다. 현대적인 ANSI 공통 리스프 독해에 대해서는 Peter Seibel의 Practical Common Lisp과 Conrad Barski의 Lisp 토픽을 추천합니다. –

답변

8

GNU CLISP가 declare의 기능을 묻는 메시지는 ignored입니다. 당신이 (function y)을 기록 할 것으로 예상된다 어디든지

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

또는 (이 그것이 y 실제로 사용 여부를 사용자에 따라 매크로 확장의 결과 특히 경우),

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

(,

+0

당신이 여기서 말한 모든 것은 당신이 말한 것과 똑같이 작동합니다. 감사! –