2014-05-13 3 views
4

내가 SBCL에서 일부 코드를 쓰고 있어요, 내 기능의 순서 내가 REPL에 파일을로드 할 때 다음과 같은 유형의 경고가 나타나는 원인 계속 :SBCL 전달 선언 : 가능합니까?

;caught STYLE-WARNING: 
    undefined function: FOO 

FOO 함수에 대한 기호입니다. 이 함수는 파일 내에서 순서가 정해져 있기 때문에 함수가 FOO으로 정의되어 있기 때문에 경고를 throw하는 코드의 일부가 아닙니다.

지금, 내가 잘 알고 있어요 리습입니다 Clojure에,에, 나는 나에게 문제의이 종류를 피하기 위해 선언을 기대하게 할 수있는 declare 형태를 가지고있다. SBCL/Common Lisp과 비슷한 것이 있습니까?

CL-USER> (defun foo (x) (bar x)) 
; in: DEFUN FOO 
;  (BAR X) 
; 
; caught STYLE-WARNING: 
; undefined function: BAR 
; 
; compilation unit finished 
; Undefined function: 
;  BAR 
; caught 1 STYLE-WARNING condition 
FOO 
CL-USER> (declaim (sb-ext:muffle-conditions style-warning)) 
; No value 
CL-USER> (defun baz (y) (quux y)) 
BAZ 

그래서 당신은 적어도 스타일의 경고를 침묵 할 수

답변

1

는 여기에 내가, 매뉴얼 섹션 4.1.1을 찾을거야.

또한 SBCL이 REPL에서 평가 단계를 처리하는 방법에 대해서도 생각했습니다. 코드를 컴파일합니다. 그래서 열등한 혀짤배기 과정을 다시 시작하고 다음 두 줄의 "지역을 컴파일"실행 :

(defun foo (x) (bar x)) 
(defun bar (y) (baz y)) 

및 SBCL은 약 baz,하지만 대한 bar을 불평했다. 단일 기능을 SBCL 또는 더 큰 청크에 제공합니까?

+0

나는 일반적으로 최상위에서''(로드 "foo.lisp을")''를 사용하여 전체 파일을로드합니다. 이 경고는 새 파일을 처음로드 할 때 표시됩니다. –

+1

'(compile-file "foo.lisp")'와'(load "foo.fasl")'을 시도하십시오. 프론트 엔드로 이맥/슬라임을 실행 중이면 Ctrl-c Ctrl-k를 사용합니다. –

1

우리가 사용할 수있는 '(열변을 토하다 (FTYPE ...))'그것에 대해 :

(declaim (ftype (function (integer list) t) ith)) 

(defun foo (xs) 
    (ith 0 xs)) 

(defun ith (n xs) 
    (nth n xs)) 

두 기능 '갑'과 'i 번째는'잘 작동하고 어떤 스타일의 경고가 그것에 대해이 없다 .

http://www.lispworks.com/documentation/HyperSpec/Body/d_ftype.htm