2014-05-13 77 views
4

我正在寫一些代碼在SBCL,並在我的職務排序不斷引起以下類型的警告,當我將文件加載到REPL出現:SBCL前向聲明:可能嗎?

;caught STYLE-WARNING: 
    undefined function: FOO 

哪裏FOO是函數的符號。這完全是由於它們是如何在我的文件中訂購的,因爲函數FOO定義的,只是不在引發該警告的代碼部分之前。

現在,在Clojure中,我熟悉的是Lisp,我使用declare表單,它使我可以進行聲明以避免此類問題。一般來說,SBCL/Common Lisp有沒有類似的東西?

回答

1

這裏是我的手冊中,4.1.1節:

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 

所以你至少可以沉默的作風警告。

我也想過SBCL如何處理REPL中的評估步驟:它編譯代碼。所以我重新啓動下LISP程序和運行在以下兩行「區域纂」:

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

和SBCL只抱怨baz,但不是bar。你是否對SBCL或更大的塊提供單一功能?

+0

我典型地使用''(負載 「foo.lisp」)''在頂層加載整個文件。這些警告顯示我第一次加載一個新文件。 –

+1

嘗試'(編譯文件「foo.lisp」)'',然後加載'(加載「foo.fasl」)'。如果你將emacs/slime作爲前端運行,那麼Ctrl-c Ctrl-k會爲你做這件事。 –